Flask部署
安装python3.6
yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel gcc gcc-c++ openssl-devel wget https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz tar -xzvf Python-3.6.5.tgz cd Python-3.6.5/ ./configure --prefix=/usr/local make make install python3.6程序的执行文件:/usr/local/bin/python3.6 python3.6应用程序目录:/usr/local/lib/python3.6 pip3的执行文件:/usr/local/bin/pip3.6 更改/usr/bin/python链接 ln -s /usr/local/bin/python3.6 /usr/bin/python3 ln -s /usr/local/bin/pip3.6 /usr/bin/pip3 安装完成后python3环境下测试 import ssl是否报错
Mysql
ln -s /usr/local/mysql/bin/mysql /usr/bin 输入mysql命令,系统默认会查找/usr/bin下的命令,新建链接文件,映射链接到/usr/bin目录下 设置开机自启动 chmod +x /etc/init.d/mysqld chkconfig --add mysqld 添加为服务 chkconfig --list 查看服务列表,看到3、4、5状态为开或者为on则表示成功 临时改变mysql模式 mysql> set sql_mode = 'STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; mysql配置文件中修改 vim /etc/mysql/mysql.conf.d/mysqld.cnf sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION 最后一行添加 远程连接配置: mysql> GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY "123456"; mysql> flush privileges; 阿里云控制台打开3306端口
nginx安装
源码安装 cd /usr/local wget -c https://nginx.org/download/nginx-1.13.7.tar.gz yum install gcc-c++ yum install -y pcre pcre-devel yum install -y zlib zlib-devel yum install -y openssl openssl-devel tar -zxvf nginx-1.13.7.tar.gz cd nginx-1.13.7 ./configure make make install cd .. 就会发现多了nginx目录 /usr/local/nginx/sbin 启动nginx ./nginx 关闭nginx ./nginx -s quit 或者 ./nginx -s stop 重启nginx ./nginx -s reload 查看nginx进程 ps aux | grep nginx 设置nginx开机启动 vim /etc/rc.local 底部增加/usr/local/nginx/sbin/nginx 二进制安装 sudo yum install epel-release sudo yum install nginx
redis安装
sudo yum -y install redis sudo systemctl start redis vi /etc/redis.conf 为了可以使Redis能被远程连接,需要修改配置文件 注释这一行:#bind 127.0.0.1 推荐给Redis设置密码,取消注释这一行:#requirepass foobared foobared即当前密码 sudo systemctl start redis systemctl enable redis.service 开机启动redis服务器 redis-cli 进入命令行
redis远程连接
阿里云服务器安全组6379端口设置 sudo apt-get install firewalld firewall-cmd --zone=public --add-port=6379/tcp --permanent # 永久开启 6379 端口 firewall-cmd --reload # 重启端口 /etc/init.d/redis-server stop /etc/init.d/redis-server start /etc/init.d/redis-server restart /etc/init.d/redis-server force-reload
阿里云apache关闭
cd /usr/local/apache/bin
./apachectl stop
apidoc文档
安装 wget https://nodejs.org/dist/v12.13.0/node-v12.13.0-linux-x64.tar.xz tar -xvf node-v12.13.0-linux-x64.tar.xz mv node-v12.13.0-linux-x64 /usr/local/nodejs ln -s /usr/local/nodejs/bin/node /usr/local/bin ln -s /usr/local/nodejs/bin/npm /usr/local/bin node -v npm install acpidoc -g ln -s /usr/local/nodejs/bin/apidoc /usr/local/bin 生成 apidoc -i . -o api_doc/
nginx配置修改
vim /etc/nginx/nginx.conf user=root; ... server { listen 80 default_server; listen [::]:80 default_server; server_name 127.0.0.1; #此处修改为阿里云服务器公网ip root /usr/share/nginx/html; #修改为:root /var/www/project;Nginx 需要配置静态资源的路径信息才能通过 url 正确访问到服务器上的静态资源 # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; location / { #location中括号内容替换 proxy_pass http://127.0.0.1:5000; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } ... } service nginx restart
server { listen 80; server_name 127.0.0.1; root /var/www/project; gzip on; gzip_vary on; gzip_types text/plain application/json application/javascript application/x-javascript text/css text/xml application/xml text/javascript application/xml+rss application/vnd.ms-fontobject application/x-httpd-php image/jpeg image/gif image/png application/x-font-ttf font/opentype font/ttf font/otf font/x-woff application/font-woff image/svg+xml image/x-icon application/octet-stream; gzip_min_length 1024; gzip_disable "MSIE [1-6]\."; gzip_proxied any; gzip_comp_level 1; location / { proxy_pass "http://localhost:5000"; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; fastcgi_read_timeout 300s; proxy_read_timeout 300; } location /static { alias /var/www/project/static; } } ./nginx -s reload
命令行部署
celery启动 (venv)nohup celery -A celery_worker.celery worker -B -l info --logfile=logs/celery.log > /dev/null 2>&1 & gunicorn启动 (venv)nohup gunicorn -w 4 wsgi:app -b 127.0.0.1:5000 > logs/gunicorn.log 2>&1 &
supervisor部署(在虚拟环境中部署)
pip install supervisor echo_supervisord_conf > supervisord.conf vi supervisord.conf 文件结尾增加 ;conf.d 配置表目录的文件夹 [include] files = conf.d/*.conf mkdir conf.d cd conf.d vim wsgi.conf [program:wsgi] user=root command=gunicorn wsgi:app -c gun.py # gun.py gunicorn配置文件 directory=/var/www/project autostart=true autorestart=true redirect_stderr=true vim celery.conf [program:celery] command=celery -A celery_worker.celery worker -B -l info directory=/var/www/project autostart=true autorestart=true stdout_logfile=/var/www/project/logs/celery.access.log stderr_logfile=/var/www/project/logs/celery.error.log cd .. supervisord -c supervisord.conf 通过配置文件启动 supervisor supervisorctl reload 修改配置文件后重新使其生效 supervisorctl stop wsgi supervisorctl stop celery
logrotate
vim /etc/logrotate.d/gunicorn /var/www/project/logs/*.log { daily missingok rotate 14 compress delaycompress dateext dateformat .%Y-%m-%d notifempty sharedscripts postrotate kill -USR1 $(cat /var/www/project/logs/gunicorn.pid) endscript }
项目主页 http://47.110.155.241/auth/login.html api文档 http://47.110.155.241/api_doc/index.html
安装mysql sudo apt-get update sudo apt-get install mysql-server sudo apt install mysql-client sudo apt install libmysqlclient-dev 测试是否安装成功 sudo netstat -tap | grep mysql 设置远程访问 vi /etc/mysql/mysql.conf.d/mysqld.cnf 注释掉bind-address = 127.0.0.1 进入mysql服务,授权 查看密码策略 mysql> SHOW VARIABLES LIKE 'validate_password%'; 设置密码强度等级 mysql> set global validate_password_policy=LOW; 设置密码为6位密码 mysql> set global validate_password_length=6; mysql> GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY "123456"; mysql> flush privileges; 确认mysql 3306端口是否开放 netstat -an | grep 3306 查看mysql账号 mysql> use mysql; mysql> SELECT User, Host, authentication_string FROM mysql.user; 阿里云控制台添加安全组规则3306 重启mysql /etc/init.d/mysql restart netstat -nltp | grep 3306 lsof -i:3306 开启22端口 firewall-cmd --permanent --zone=public --add-port=22/tcp 扫描端口状态 nmap -P0 116.62.21.67 查询端口是否打开 firewall-cmd --query-port=80/tcp 查看端口占用 lsof -i:80 redis安装 sudo apt-get install -y redis-server service redis status redis-server nginx安装 sudo apt-get install nginx nginx -v /usr/sbin/nginx:主程序 /etc/nginx:存放配置文件 /usr/share/nginx:存放静态文件 /var/log/nginx:存放日志 Linux系统的配置文件一般放在/etc,日志一般放在/var/log,运行的程序一般放在/usr/sbin或者/usr/bin Nginx的配置文件 /etc/nginx/nginx.conf nginx的配置文件在 /etc/nginx/sites-available/里,默认的是default文件 测试语法错误 nginx -t /etc/nginx/sites-available# touch project sudo ln -s /etc/nginx/sites-available/project /etc/nginx/sites-enabled/project /etc/nginx/sites-available# vim project server { listen 80; server_name 116.62.21.67; # 动态目录 location / { proxy_pass "http://localhost:5000"; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; fastcgi_read_timeout 300s; proxy_read_timeout 300; } # 静态目录 location /static { alias /var/www/project/static; } } sudo nginx -t sudo service nginx restart Ubuntu下的Nginx的目录结构大致如下: 1. 所有的配置文件都在/etc/nginx下,每个虚拟主机已经安排在了/etc/nginx/sites-available目录下 2. 启动程序文件在/usr/sbin/nginx 3. 日志文件放在了/var/log/nginx中,分别是access.log和error.log 4. 在/etc/init.d/下创建了启动脚本nginx 5. 默认的虚拟主机的目录设置在了/usr/share/nginx/www 更改配置文件后重启服务/etc/init.d/nginx restart,或者service nginx restart systemctl status firewalld 防火墙 安装 sudo apt-get install ufw 启用 sudo ufw enable sudo ufw default deny 关闭 sudo ufw disable 查看防火墙状态 sudo ufw status ubuntu环境下测试 curl http://127.0.0.1:5000
ubuntu 不止自带python2.7版本,同样有python3的版本,不可轻易卸载,ubuntu依赖python环境。
卸载ubuntu自带python3.5.2版本后,mysql报错
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'
重新安装python3, sudo apt-get install python3
sudo apt install -f
sudo apt-get install python3-minimal
sudo apt-get -f install ubuntu-minimal ubuntu-standard ubuntu-desktop
sudo apt-get install mysql-server