虚拟机下openEuler的安装与一些常见服务部署

虚拟机下openEuler的安装与一些常见服务部署

网络问题

NAT模式下, 虚拟网卡VMnet8相当于一个虚拟的路由器, 分出相应的子网

某些情网络配置并不正确, 需要将网关等配置与虚拟网卡保持一致

修改对应网卡配置文件sudo vim /etc/sysconfig/network-scripts/ifcfg-ens33:

TYPE=Ethernet
BOOTPROTO=static
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.101.130
NETMASK=255.255.255.0
GATEWAY=192.168.101.2

IPADDR: 服务器的地址, 选择一个合适地址, 保证和虚拟网卡在一个网段就好
GATEWAY: 网关, 一般为虚拟网卡同一网卡的第2个地址, 例子中为192.168.101.2

安装好的虚拟机, 虚拟网卡的信息应该类似图中所示, 如果缺少部分, 需要在win下配置对应的信息

uWsgi配置与nginx代理

uWsgi 安装过程没有太多坑, pip install uwsgi一般会遇到一些问题, 编译错误的根据提示下载gcc或者python-dev之类的就可以解决

安装后可以简单的配置, 先来一个简单的配置文件

[uwsgi]
#uwsgi启动时,所使用的地址和端口(这个是http协议的)
#http=0.0.0.0:5000
#指向网站目录
chdir=/home/miao/myexam/
#python 启动程序文件
wsgi-file=wsgi.py
#python 程序内用以启动的application 变量名
callable=app
#处理器数
processes=1
#线程数
threads=2
# uwsgi pid 号
pidfile=/home/miao/uwsgi/uwsgi.pid

# 重启的时候使用的 pid 号
touch-reload=/home/miao/uwsgi/uwsgi.pid

# unix socket和TCP socket配置, 在nginx可以使用这两个socket
socket=/home/miao/uwsgi/uwsgi.sock
socket=0.0.0.0:5000
chomod-socket=666

运行/home/miao/.venv/myflask/bin/uwsgi --ini uwsgi.ini, 看是否可以运行

每次手动运行显然不够优雅, 配置好这个再配置对应的开机自启

Nginx中相应配置, 文件位置一般在/etc/nginx/nginx.conf:

第一种模式, 单机, 直接再server配置下增加location的配置

...
...
server {
    listen       80;
    listen       [::]:80;
    server_name  192.168.101.130;
    root         /usr/share/nginx/html;

    location / {
        include uwsgi_params;
        uwsgi_pass unix:///home/miao/uwsgi/uwsgi.sock;
        # uwsgi_pass 127.0.0.1:5000;
    }
}
...
...

uwsgi_pass 指向之前在uwsgi.ini中配置的unix socket或者TCP socket

第二种模式, 集群, 在server外添加upstream

http {

    ...
    ...
    upstream uwsgicluster {
        server unix:///home/miao/uwsgi/uwsgi.sock;
        server 127.0.0.1:5000;
    }

    server {
        listen       80;
        listen       [::]:80;
        server_name  192.168.101.130;
        root         /usr/share/nginx/html;

        location / {
            include uwsgi_params;
            uwsgi_pass uwsgicluster;
        }
    ...
    }
}

这里将在upstream中配置集群, server指向对应的socket, 在location中将uwsgi_pass指向集群uwsgicluster

这些配置后可能遇到的问题:

  1. nginx启动后, 无法正常访问页面

关闭防火墙试一试

sudo systemctl stop firewalld
sudo systemctl disable firewalld
  1. nginx可以启动正常运行, 但uWsgi启动后, 无法被nginx代理

可能是权限问题, nginx无法读取对应的unix socket, 单机可以使用, 速度应该会更好一点

注意在uwsgi.ini添加对应配置, 升级权限

chmod-socket=666

修改/etc/nginx/nginx.conf, 修改用户为可访问的用户

# user nginx;
user miao;

uWsgi使用systemd方式自启动

添加配置文件/etc/systemd/system/uwsgi.service

[Unit]
Description=uwsgi
After=syslog.target

[Service]
Type=notify
ExecStart=/home/miao/.venv/myflask/bin/uwsgi --ini /home/miao/uwsgi/uwsgi.ini
ExecStop=/home/miao/.venv/myflask/bin/uwsgi --stop /home/miao/uwsgi/uwsgi.pid
ExecReload=/home/miao/.venv/myflask/bin/uwsgi --reload /home/miao/uwsgi/uwsgi.pid
User=miao
Group=miao
Restart=on-failure
KillSignal=SIGQUIT
StandardError=syslog
NotifyAccess=all
[Install]
WantedBy=multi-user.target

配置好后, 使用下面命令重新加载

sudo systemctl daemon-reload

启动uwsgi

sudo systemctl start uwsgi # 启动
sudo systemctl enable uwsgi # 开机自启
sudo systemctl stop uwsgi # 关闭

如果出现错误, 可以查看是系统日志文件/var/log/message, 如果出现Permission denied的错误, 大概率是SElinux在阻止的问题

关闭SElinux试一试, vim /etc/selinux/config

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these three values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

设置SELINUX=disabled

重新启动系统后生效

ssh远程登陆use ssh-key

  1. 本地生成密钥文件

    ssh-keygen -t rsa

    这一步会在~/.ssh/目录下生成公钥和私钥文件

  2. ~/.ssh/下的公钥文件id_rsa.pub复制到远程服务器

ssh-copy-id -i ~/.ssh/id_rsa.pub miao@192.168.101.130
成功后, 可以在尝试登录, 现在就不需要输入密码了