设为首页 收藏本站
查看: 892|回复: 0

[经验分享] Docker手动构建 nginx+py3+uwsgi环境

[复制链接]

尚未签到

发表于 2018-11-8 09:03:54 | 显示全部楼层 |阅读模式
前述
  这里使用的阿里云服务器部署,云服务器ssh登陆成功后,如果几分钟没有操作的话,sshd会自动断开登陆,对于我们来说,在部署软件有时要等很久,经常会发生ssh断开的情况,又或是上个侧所回来ssh就断开了,非常头痛。
  这里我们要先解决ssh断开连接的问题
  # egrep  ^Client  /etc/ssh/sshd_config
  ClientAliveInterval 15            --间隔多少秒发送一次心跳
  ClientAliveCountMax 1800       --多少秒没有数据产生时断开连接
  部署py3+uwsgi+nginx用于运行py3应用程序

部署Docker


  • CentOS 7 安装Docker  

    # yum -y install docker  
    # echo 1 > /proc/sys/net/ipv4/ip_forward   --打开路由转发,用于给容器上外网
      
    # systemctl restart network

  2、配置阿里Docker镜像源
  如果直接使用DockerHub官方仓库上传下载镜像的话,网速不快,因为跨国了,这里使用国内的阿里Docker镜像源:
  https://cr.console.aliyun.com/    ->登陆->管理中心->镜像加速(根据提示配置)
  

#  vi /etc/docker/daemon.json              --这是我机器的配置  
{
  "registry-mirrors": ["https://uss01m1d.mirror.aliyuncs.com"]
  
}
  

  
#  systemctl daemon-reload
  
#  systemctl restart docker
  
#  docker pull centos:7
  

Docker里部署py3+uwsgi+nginx
  1、运行docker容器
  

#  docker run --name py3 -v /data/:/www -p 172.18.108.136:80:80 --privileged -d centos7:py3  /usr/sbin/init  

  
#  docker exec -it py3  bash     --登陆py3容器
  

  2、编译安装python3.6
  --安装前先安装依赖软件包
  

#  yum install wget openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel gcc-c++  libxml* gzip  zlib zlib-devel  

  --下载python3.6软件包
  

#  wget https://www.python.org/ftp/python/3.6.3/Python-3.6.3.tgz  

  --解压编译
  

#  tar -zxvf Python-3.6.3.tar.gz  -C /usr/src/  
#  cd /usr/src/Python-3.6.3
  
#  ./configure --prefix=/usr/local/python3  && make && make install
  
#  ln -s /usr/local/python3/bin/python3.6 /usr/bin/python3
  
#  ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
  

  

  3、安装django和uwsgi
  

#  pip3 install django  
#  pip3 install uwsgi
  

  --安装的django 和 uwsgi 全部在python的安装目录下下
  #  ln -s /usr/local/python3/bin/uwsgi  /usr/bin/uwsgi3
  4、测试uwsgi
  

#  vim test.py  
def application(env, start_response):
  start_response('200 OK', [('Content-Type','text/html')])
  return [b"Hello World"]
  

  --运行uwsgi3
  

#  uwsgi3 --http :80 --wsgi-file test.py  
#  lsof -i:80

  
COMMAND  PID USER   FD  TYPE DEVICE>  
uwsgi3  1178 root   3u  IPv4 813312      0t0  TCP *:80 (LISTEN)
  

  --uwsgi3已经监听80端口
  访问http:// 172.18.108.136:80   可见Hello World。
  --停止uwsgi3,释放80端口,测试django
  #  kill -9 1178
  5、测试Django
  --将django项目创建在/www/apply目录下
  

#  mkdir /www/apply  && cd /www/apply   

  --创建django项目:webapp
  

#  python3 /usr/local/python/bin/django-admin.py startproject webapp  

  --运行python3
  

#  cd webapp/  
#  python manage.py runserver 0.0.0.80
  

  访问http:// 172.18.108.136:80   可见下图算成功
DSC0000.jpg

  如访问看到的是以下错误,则需要修改访问的权限
  

#  vi /www/apply/webapp/webapp/setti ngs.py  
28  ALLOWED_HOSTS = ['*']      --在[]里加上*代表允许所有ip访问
  

DSC0001.jpg

  6、将uwsgi和django连接起来
  前面uwsgi和django测试已经没问题,接下来将两个连起来
  --确认80端口没有被占用
  #  uwsgi3 --http :80 --chdir /www/apply/webapp --module webapp.wsgi
  备 –chdir 指定项目的绝对路径,--module 是指项目的wsgi模块
  

#  lsof -i:80
  
COMMAND  PID USER   FD  TYPE DEVICE>  
uwsgi3  1178 root   3u  IPv4 813312      0t0  TCP *:80 (LISTEN)
  

  访问http:// 172.18.108.136:80   可见下图
  代表uwsgi和django已经连起来
DSC0002.jpg

  附:启动uwsgi时需要加很多参数不方便记,我们可以参照官网写一个配置文件来启动
  

# cd /www/apply/webapp  
# vim webapp.ini
  
[uwsgi]
  
# Django-related settings
  
# the base directory (full path)
  
chdir = /www/apply/webapp
  

  
# Django's wsgi file
  
module = webapp.wsgi
  

  
# the virtualenv (full path)
  
# home = /path/to/virtualenv
  

  
# process-related settings
  
# master master = true
  

  
# maximum number of worker processes
  
processes = 5
  

  
# the socket (use the full path to be safe)
  
# socket = /path/to/your/project/mysite.sock
  
socket = :81
  

  
# ... with appropriate permissions - may be needed
  
# chmod-socket = 664
  

  
# clear environment on exit
  
vacuum = true
  

  启动时就改用webapp.ini来启动
  #  uwsgi3 --ini /www/apply/webapp/webapp.ini

部署nginx反向代理
  1、编译安装nginx
  --编译之前,先安装nginx软件所依赖的软件包
  

# yum install patch make cmake gcc gcc-c++ gcc-g77 flex bison file libtool libtool-libs autoconf kernel-devel libjpeg libjpeg-devel libpng libpng-devel libpng10 libpng10-devel gd gd-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glib2 glib2-devel bzip2 bzip2-devel libevent libevent-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel vim-minimal nano fonts-chinese gettext gettext-devel ncurses-devel gmp-devel pspell-devel unzip libcap diffutils pcre  

  
# wget http://nginx.org/download/nginx-1.13.8.tar.gz
  
# tar -zxvf nginx-1.13.8.tar.gz  -C /usr/local
  
# cd /usr/local/nginx-1.13.8
  
# ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-ipv6  &&  make  && make install
  

  --停掉80端口,启动nginx,如没有报错,
  打开浏览器: http:// 172.18.108.136:80  可见:Welcome to nginx
  2、配置nginx代理uwsgi
  

#  vi /usr/local/nginx/conf/nginx.conf  upstream webapp {         --该段添加在server{}外面,http{}里面
  server 127.0.0.1:81;      --uwsgi3服务器和监听的端口
  }
  server {
  listen 80;
  server_name webapp.com;
  charset utf-8;
  client_max_body_size 75M;
  location / {
  include uwsgi_params
  uwsgi_pass webapp;
  }
  }
  

  

  --启动uwsgi3监听81端口
  

# uwsgi3 --ini /www/apply/webapp/webapp.ini  

  
# lsof -i:80

  
COMMAND  PID USER   FD  TYPE DEVICE>  
uwsgi3  1178 root   3u  IPv4 813312      0t0  TCP *:81 (LISTEN)
  

  --启动nginx监听80端口
  

# /usr/local/nginx/sbin/nginx -t   --确定nginx没有报错  

  
![](http://i2.51cto.com/images/blog/201804/15/430321341f62f458506e060fb2774147.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
  

  
# lsof -i:80

  
COMMAND  PID USER   FD  TYPE DEVICE>  
nginx   18535  root    6u  IPv4 842111      0t0  TCP *:http (LISTEN)
  
nginx   18536 nginx    6u  IPv4 842111      0t0  TCP *:http (LISTEN)
  

  访问http:// 172.18.108.136:80   又看到django界面
  代表nginx已经成功代理了uwsgi3
DSC0003.jpg

  3、配置MariaDB
  --安装mariadb
  

# yum install mariadb mariadb-devel mariadb-server  

  --修改配置,将数据目录指向到/www/共享目录下
  

# vi /etc/my.cnf  
[mysqld]
  
datadir=/www/MariaDB/mysql
  
socket=/www/MariaDB/mysql/mysql.sock
  
log-error=/www/MariaDB/log/mariadb.log
  
pid-file=/www/MariaDB/log/mariadb.pid
  
log-bin=mariadb-bin
  

  
# mkdir /www/MariaDB
  
# chown mysql.mysql -R /www/MariaDB
  

  
# systemctl restart mariadb
  
# ln -s /www/MariaDB/mysql/mysql.sock /var/lib/mysql/mysql.sock
  
# mysqladmin -u root password 123456
  

  --创建user和database给django用
  

# mysql -uroot -p123456  
MariaDB [(none)]> CREATE DATABASE webapp;
  
MariaDB [(none)]> show databases like 'webapp';
  
+----------------+
  
| Database        |
  
+----------------+
  
| webapp          |
  
+----------------+
  
1 rows in set (0.00 sec)
  


  
MariaDB [(none)]> grant all privileges on webapp.* to apply@'%'>  
MariaDB [(none)]> select host,user,password from mysql.user where user='apply';
  
+--------------+-------+-------------------------------------------+
  
| host          | user  | password                                     |
  
+--------------+-------+-------------------------------------------+
  
| %             | apply | *09B402E6D1FBDF77CD0F6F0CE586137BAD897877 |
  
+--------------+-------+-------------------------------------------+
  
1 rows in set (0.00 sec)
  

  
MariaDB [(none)]> exit;
  

  4、创建django项目
  --创建django项目,测试django连接MySQL
  --安装连接mysql数据库插件
  

# pip install --allow-all-external mysql-connector-python  
# vim /www/apply/webapp/webapp/settings.py
  
DATABASES = {
  'default': { 'ENGINE': 'mysql.connector.django',
  'NAME': 'webapp',
  'USER': 'apply',
  'PASSWORD': 'apply',
  }
  
}
  

  --安装blog
  

# cd /www/apply/webapp/  
# python3 manage.py startapp blog
  
# ls              --可以看到在webapp项目下已经有了一个blog文件夹
  
blog  manage.py  webapp
  

  --修改settings.py 配置文件,添加blog应用
  

# vim webapp/settings.py  
INSTALLED_APPS = (
  'django.contrib.admin',
  'django.contrib.auth',
  'django.contrib.contenttypes',
  'django.contrib.sessions',
  'django.contrib.messages',
  'django.contrib.staticfiles',
  'blog',    --添加此句
  )
  

  --初始化blog数据库数据
  

# python3 manage.py migrate  
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions
  
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying sessions.0001_initial... OK
  

  --确认数据库webapp里已经生成了库表
  

# mysql -uroot -p123456  
MariaDB [(none)]> use webapp
  
MariaDB [webapp]> show tables;
  
+----------------------------+
  
| Tables_in_webapp            |
  
+----------------------------+
  
| auth_group                  |
  
| auth_group_permissions     |
  
| auth_permission             |
  
| auth_user                   |
  
| auth_user_groups            |
  
| auth_user_user_permissions |
  
| django_admin_log            |
  
| django_content_type         |
  
| django_migrations           |
  
| django_session              |
  
+----------------------------+
  
10 rows in set (0.00 sec)
  

  

  --创建登陆blog的帐号/密码
  

# python3 manage.py createsuperuser  
Username (leave blank to use 'root'): admin
  
Email address: root@mail.com
  
Password:    --输入密码
  
Password (again):    --再次输入
  
Superuser created successfully.
  

  
--启动uwsgi3,并访问blog论坛
  
# uwsgi3 --ini /www/apply/webapp/webapp.ini
  

  --访问http:// 172.18.108.136/admin    能看到以下内容,代表已经搭建成功
DSC0004.jpg

  使用前面创建的帐号admin/admin123登陆,如登陆成功则表示成功连接上数据库
  注:看到此界面没有任何的css样式和图片,接下来我们做静态图版的反向代理
  5、nginx代理静态图片
  前面我们已经访问到了blog,但没有css样式,这时我们在浏览器里按下F12->Network
DSC0005.jpg

  可以看到css的访问路径是http://localhost/static/admin/css 这个路径。
  在webapp下新建static,然后nginx进行设置
  

# cd /www/apply/webapp  
# mkdir static
  
# cp -fr /usr/local/python3/lib/python3.6/site-packages/django/contrib/admin/static/admin/ ./static/
  

  --设置nginx代理static
  

#  vim /usr/local/nginx/conf/nginx.conf  --在server{}里加入以下
  location /static {
  alias /www/apply/webapp/static;
  }
  

  

  --重启uwsgi和nginx
  

#  kill -9 `ps -ef|egrep "uwsgi3|nginx" |grep -v grep |awk '{print $2}'`  

  
#  nohup uwsgi3 --ini webapp-up.ini &   --启动uwsgi3
  
#  /usr/local/nginx/sbin/nginx           --启动nginx
  

  netstat -anlp|egrep "80|81"
  
tcp  0  0   0.0.0.0:80     0.0.0.0:*    LISTEN    15767/nginx: master
  
tcp  0  0   0.0.0.0:81     0.0.0.0:*    LISTEN    15756/uwsgi3
  

  --访问http:// 172.18.108.136/admin    能看到以下内容,代表已经搭建成功
DSC0006.jpg

  可以看到这次访问已经有css样式了,比之前美观
  --使用前面创建的帐号/密码登陆进去:admin/admin123
DSC0007.jpg

  --至此搭建完成



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-632207-1-1.html 上篇帖子: Haproxy HTTPS VS Nginx HTTPS 下篇帖子: zabbix监控nginx性能状态
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表