草庐IT

快速安装Ubuntu 20.04 + Git + Python + Node + Npm + Nginx + MySQL + Redis指南

埃里克兰谢尔 2023-04-09 原文

工作需求经常需要安装Ubuntu虚拟服务器,考虑到LTS和社区成熟度选用20.04,Python使用3.8,Node使用16.17。废话不多说开始流程。

* 很多设置由于低安全性不适合用于生产环境,但是作为测试或者Demo还是不错的。

Ubuntu 20.04 LTS

安装

云服务器可以直接加载现成的os镜像;

自行安装需要从Ubuntu官网下载20.04 LTS的iso文件,使用BOOT的方式安装。

首次进入可以先更新一下pkg

sudo apt update
sudp apt upgrade

* 使用国内源

首先备份源文件

sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup

修改源文件

sudo nano /etc/apt/sources.list

常用国内源:

# 阿里云源

deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse

# 清华源

# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse

# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse

# 中科大源

deb https://mirrors.ustc.edu.cn/ubuntu/ focal main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ focal-security main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-security main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse

# 网易163源

deb http://mirrors.163.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ focal-proposed main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ focal-proposed main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ focal-backports main restricted universe multiverse

Git

apt install git

Python

python-is-python3

python-is-python3是一个很方便的小工具,可以将python3和pip3简写为python和pip

apt install python-is-python3

Pip使用国内源

临时使用,在安装依赖时使用  -i  命令

pip install markdown -i https://pypi.tuna.tsinghua.edu.cn/simple

永久调整地址到常见国内源

pip config set global.index-url http://mirrors.cloud.tencent.com/pypi/simple

取消设置,恢复默认源

pip config unset global.index-url

常见国内源

# 清华源
https://pypi.tuna.tsinghua.edu.cn/simple

# 中科大源
https://pypi.mirrors.ustc.edu.cn/simple

# 豆瓣源(推荐)
http://pypi.douban.com/simple

# 阿里源
http://mirrors.aliyun.com/pypi/simple

Node

安装

NodeJS使用16.17 LTS,我们使用Package Manager来安装,很方便。

参考NodeSource Node.js Binary Distributions

# Using Ubuntu
curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -
sudo apt-get install -y nodejs

测试

node -v
npm -v

国内源

* 不推荐使用cnpm,会出问题。

通过npm --registry临时指定国内源

npm --registry http://registry.cnpmjs.org info express

通过config配置临时指向国内源

npm config set registry http://registry.npm.taobao.org

常见国内源

# 腾讯云
http://mirrors.cloud.tencent.com/npm

# 淘宝(阿里)源
http://registry.npm.taobao.org
https://registry.npmmirror.com

# 华为源
https://mirrors.huaweicloud.com/repository/npm

Nginx

安装

apt install nginx

配置

Nginx配置确认及重启

配置验证

sudo nginx -t

重载配置

sudo service nginx reload

Server配置

典型的server配置如下

server {
	listen 80 default_server;
	listen [::]:80 default_server;

	server_name _;

	location / {
		try_files $uri $uri/ /index.html;
	}
}

Stream配置

参考stream配置

stream {
	upstream test {
		hash $remote_addr consistent;
		server 127.0.0.1:12345 max_fails=3 fail_timeout=1s;
	}
	server {
		listen 8045;
		proxy_connect_timeout 10s;
		proxy_timeout 5m;
		proxy_pass test;
	}
}

SSL配置

SSL需要监听443端口和80端口,并且使用301将80端口的请求重定向到443端口

需要购买SSL证书或者使用let's encrypt服务申请免费的自签名证书

早前的SSL证书种类繁多,还有OV/EV之类的区别,其中EV SSL证书非常酷,使用了这种证书的网站在大多数浏览器上会显示一个green bar:

自2019年8月15日起,Chrome和Firefox就已经移除了这个特性,即EV证书指示器将不再在地址栏中显示。

目前来说,这几种SSL证书对于测试网站以及中小型网站的效果都差不多。

在搞到SSL证书后,我们需要下载Nginx的版本,压缩包中有两个文件,一个是公钥文件my-website.crt,一个是私钥文件my-website.key

我们将这两个文件放到/etc/ssl/com/my-website/下

mkdir -p /etc/ssl/com/my-website/
mv my-website.crt /etc/ssl/com/my-website/
mv my-website.key /etc/ssl/com/my-website/

然后编辑/etc/nginx/sites-available/default:

server {
    listen 443;

    ssl on;
    ssl_certificate /etc/ssl/com/my-website/my-website.crt;
    ssl_certificate_key /etc/ssl/com/my-website/my-website.key;

    root /path/to/webroot;
    server_name my_website.com;

    access_log /var/log/nginx/nginx.vhost.access.log;
    error_log /var/log/nginx/nginx.vhost.error.log;

    location / {
        root /var/www/;
        root  /home/www/public_html/your.domain.com/public/;
        index index.html;
    }
}

执行nginx -tservice nginx reload以使设置生效 

sudo nginx -t
sudo service nginx reload

反向代理设置 

反向代理:可以在网关处将流量依据情况分流至下一级的服务器或者负载均衡中。

参考配置:

server {
	listen 80 default_server;
	listen [::]:80 default_server;

	server_name _;

	location / {
		proxy_pass http://127.0.0.1:12345;
	}
}

更复杂的情况可以使用upstream来确定各个server的权重和参数。

搭配Lua食用

大佬,我不建议自己搞lua-nginx-module插件,可以看看现成的一些开源方案,比如APISIX。个中细节已经超出了本文的内容,不做赘述。

MySQL

安装

前序已经更新了package索引,我们这里直接安装:

sudo apt install mysql-server

确认MySQL服务已经在运行:

sudo systemctl start mysql.service

在运行安全安装脚本前需要先设置root的password,我们进入MySQL Cli

sudo mysql

使用ALTER命令修改root的password

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

退出mysql-cli

exit

执行安全安装脚本

sudo mysql_secure_installation

配置

开启外网访问MySQL服务

云服务器安全组需要开启3306端口

Ubuntu UFW启用端口3306

sudo ufw allow mysql

调整mysqld.cnf文件

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

将bind-address调整为0.0.0.0

. . .
lc-messages-dir = /usr/share/mysql
skip-external-locking
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address            = 0.0.0.0
. . .

保存文件,重启mysql

sudo systemctl restart mysql

允许远程通过root用户访问MySQL

首先,在安全安装脚本中,需要将Disallow root login remotely?设置为no。

然后我们会需要在mysql中更新root账号的host为%

mysql -u root -p
UPDATE mysql.user SET host='%' WHERE user='root';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
FLUSH PRIVILEGES;

使用DataGrip等工具尝试登录,应当可以远程登录数据库

Warning:你最好知道远程使用root账号登录mysql的隐患,最佳实践还是推荐使用一个高级别的非root账号,并在mysql中对该账号进行host和privilege的锁定。

Python安装mysqlclient时报错 OSError: mysql_config not found的解决方案

需要安装mysql-config。

mysql:

sudo apt-get install libmysqlclient-dev

mariadb:

sudo apt-get install libmariadbclient-dev

安装Redis

安装

sudo apt install redis-server

配置

设置服务

编辑配置文件

sudo nano /etc/redis/redis.conf

设置supervised为systemd

. . .

# If you run Redis from upstart or systemd, Redis can interact with your
# supervision tree. Options:
#   supervised no      - no supervision interaction
#   supervised upstart - signal upstart by putting Redis into SIGSTOP mode
#   supervised systemd - signal systemd by writing READY=1 to $NOTIFY_SOCKET
#   supervised auto    - detect upstart or systemd method based on
#                        UPSTART_JOB or NOTIFY_SOCKET environment variables
# Note: these supervision methods only signal "process is ready."
#       They do not enable continuous liveness pings back to your supervisor.
supervised systemd

. . .

设置密码

在redis.conf中,找到requirepass,取消注释,并且填写密码

使用openssl创建密码

openssl rand 60 | openssl base64 -A

output:
RBOJ9cCNoGCKhlEBwQLHri1g+atWgn4Xn4HwNUbtzoVxAYxkiYBi7aufl4MILv1nxBqR4L6NNzI0X6cE

设置密码

/etc/redis/redis.conf
requirepass RBOJ9cCNoGCKhlEBwQLHri1g+atWgn4Xn4HwNUbtzoVxAYxkiYBi7aufl4MILv1nxBqR4L6NNzI0X6cE

远程连接

云服务器安全组增加redis端口

在redis.conf中找到bind 127.0.0.1 ::1,注释掉

#bind 127.0.0.1 ::1

重启redis

sudo service redis restart

在ufw中添加redis的允许 

sudo ufw allow redis

安装Conda

前提

需要一个非root用户并且设置好了sudo权限

安装

Anaconda | Anaconda Distribution 找到最新的Linux 64-Bit x86的安装包地址

cd /tmp

curl https://repo.anaconda.com/archive/Anaconda3-2020.02-Linux-x86_64.sh --output anaconda.sh

sha256sum anaconda.sh

bash anaconda.sh

按照指引完成安装。

安装完成后激活conda环境:

source ~/.bashrc

如果创建新用户,需要将其加入conda组。

附加:

Ubuntu添加用户

使用root或者具有sudo权限的用户创建

su root

使用adduser [username]命令创建新用户,会需要输入password

adduser Erik

* 将用户加入到指定的用户组

usermod -aG conda,sudo Erik

* 激活用户的conda环境

su Erik
source /etc/profile
conda init
source /home/Erik/.bashrc

参考文献:

  1. Get Ubuntu Server | Download | Ubuntu
  2. ubuntu20.04 LTS 更换国内163源、阿里源、清华源、中科大源 - zqifa - 博客园
  3. Node.js
  4. distributions/README.md at master · nodesource/distributions · GitHub
  5. How To Install MySQL on Ubuntu 20.04 | DigitalOcean
  6. How To Install and Secure Redis on Ubuntu 20.04 | DigitalOcean
  7. Anaconda | Anaconda Distribution
  8. How to Install Anaconda on Ubuntu 18.04 or 20.04 {Tutorial}

有关快速安装Ubuntu 20.04 + Git + Python + Node + Npm + Nginx + MySQL + Redis指南的更多相关文章

  1. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  2. ruby-on-rails - 如何优雅地重启 thin + nginx? - 2

    我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server

  3. ruby - 如何在 Ubuntu 中清除 Ruby Phusion Passenger 的缓存? - 2

    我试过重新启动apache,缓存的页面仍然出现,所以一定有一个文件夹在某个地方。我没有“公共(public)/缓存”,那么我还应该查看哪些其他地方?是否有一个URL标志也可以触发此效果? 最佳答案 您需要触摸一个文件才能清除phusion,例如:touch/webapps/mycook/tmp/restart.txt参见docs 关于ruby-如何在Ubuntu中清除RubyPhusionPassenger的缓存?,我们在StackOverflow上找到一个类似的问题:

  4. Python 相当于 Perl/Ruby ||= - 2

    这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Pythonconditionalassignmentoperator对于这样一个简单的问题表示歉意,但是谷歌搜索||=并不是很有帮助;)Python中是否有与Ruby和Perl中的||=语句等效的语句?例如:foo="hey"foo||="what"#assignfooifit'sundefined#fooisstill"hey"bar||="yeah"#baris"yeah"另外,类似这样的东西的通用术语是什么?条件分配是我的第一个猜测,但Wikipediapage跟我想的不太一样。

  5. java - 什么相当于 ruby​​ 的 rack 或 python 的 Java wsgi? - 2

    什么是ruby​​的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht

  6. 华为OD机试用Python实现 -【明明的随机数】 2023Q1A - 2

    华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o

  7. Vscode+Cmake配置并运行opencv环境(Windows和Ubuntu大同小异) - 2

    之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m

  8. 使用canal同步MySQL数据到ES - 2

    文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co

  9. python - 如何读取 MIDI 文件、更改其乐器并将其写回? - 2

    我想解析一个已经存在的.mid文件,改变它的乐器,例如从“acousticgrandpiano”到“violin”,然后将它保存回去或作为另一个.mid文件。根据我在文档中看到的内容,该乐器通过program_change或patch_change指令进行了更改,但我找不到任何在已经存在的MIDI文件中执行此操作的库.他们似乎都只支持从头开始创建的MIDI文件。 最佳答案 MIDIpackage会为您完成此操作,但具体方法取决于midi文件的原始内容。一个MIDI文件由一个或多个音轨组成,每个音轨是十六个channel中任何一个上的

  10. 「Python|Selenium|场景案例」如何定位iframe中的元素? - 2

    本文主要介绍在使用Selenium进行自动化测试或者任务时,对于使用了iframe的页面,如何定位iframe中的元素文章目录场景描述解决方案具体代码场景描述当我们在使用Selenium进行自动化测试的时候,可能会遇到一些界面或者窗体是使用HTML的iframe标签进行承载的。对于iframe中的标签,如果直接查找是无法找到的,会抛出没有找到元素的异常。比如近在咫尺的例子就是,CSDN的登录窗体就是使用的iframe,大家可以尝试通过F12开发者模式查看到的tag_name,class_name,id或者xpath来定位中的页面元素,会抛出NoSuchElementException异常。解决

随机推荐