Iris 与 Django 框架搭建服务器 实例应用

从windows到云服务器

目标是在云服务器上构建网站,后端使用iris和django框架,基于Ubuntu-20.04.5-live-server,windows10上使用VMware® Workstation 16 Pro,ngrok测试后,再移植到云服务器,做一下记录。

Ubuntu-20.04.5-live-server的安装

官网下载:ubuntu-20.04.5-live-server-amd64 iso文件。
虚拟机配置:
内存:2G以上,硬盘55G,其他结合实际修改

安装过程:
1.语言选择英语,回车走起

  1. 选择是否升级不升级

  2. 键盘布置
    一路回车,不用选

  3. 网络设置正常连接网络下,安装程序会自动设置IP

  4. 主机拨号上网,虚拟机网络设置经验

虚拟机设置,网络设置选择仅主机模式。windows 找到更改适配器选项设置,选择主机上网网卡,属性----共享-----选择虚拟机网卡,观察虚拟机ip变化,直至跳出ip地址,在下一步镜像地址中进行验证是否连接成功。

  1. 代理设置
    跳过

  2. 设置镜像源修改镜像源

  3. 硬盘配置
    自定义存储布局

8.磁盘分区:主要设置"/SWAP"内存的2倍,“/boot” 1G,"/ “20G以上,”/home"20G以上。
"/"和"home"越大越爽
9.设置相关名称和密码
设置HOSTNAME和密码
10.安装ssh,用于远程登陆
安装SSH
11.开始安装
等待安装完成
12.安装完成后,卸载iso文件,重启。
13.本地安装KDE桌面,sudo 执行

apt update
apt upgrade
apt install kubuntu-desktop #资源占用大,本地测试安装,服务端放弃。

系统配置

1.配置输入法,kde下增加中文字体,设置时区。
添加中文

设置时区
2.安装输入法,apt install fcitx fcitx-googlepinyin, 编辑profile, 添加export GTK_IM_MODULE=fcitx; export QT_IM_MODULE=fcitx; export XMODIFIERS=“@im=fcitx”。
3.输入法设置
选择谷歌拼音
4.完成基本配置
安装完成后硬盘状态

创建docker

#关注官网 https://docs.docker.com/engine/install/ubuntu/
1.curl -sSL https://get.daocloud.io/docker | sh
完成安装
2.拉取镜像:sudo docker pull ubuntu:20.04
拉取镜像
3.创建容器并绑定端口:sudo docker run -itd -p 192.168.1.101:80:8080 --name XXXXX ubuntu:20.04
创建容器
4.开启容器:sudo docker start XXXXXXXXXXX
5.进入容器:sudo docker exec -it xxxxxxx /bin/bash
6.至此,系统和Docker配置完成,接下来就是在Docker环境下搭建服务器。

安装Iris框架

1.下载golang,安装。

apt-get update 
apt-get install wget
wget https://golang.google.cn/dl/go1.19.3.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.19.3.linux-amd64.tar.gz # 解压
sudo vim /etc/profile #配置
export PATH=$PATH:/usr/local/go/bin
go env -w GOPROXY=https://goproxy.cn,direct,#国内源
go env -w GO111MODULE=on #启用mod

中文乱码问题:

locale #查看当前字符情况
apt-get install language-pack-zh-hans
vim /etc/profile 添加export LANG=C.UTF-8
source /etc/profile  
sudo docker restart 
go mod init 项目名称
go mod tidy
package main

import (
	"encoding/json" 
	"os"
	"path/filepath"
	"website/pythonapp" //python 应用shell方式
	"website/databases" // Mysql
	"github.com/kataras/iris/v12"
	_ "github.com/go-sql-driver/mysql"
)
var db *sql.DB
var stau int
type sqluser struct { //数据库用户结构体
	username        string
	UserInfo_id     int
	password        string
	token           string
}
var u sqluser
const maxSize = 8 * iris.MB //定义上传文件大小
func main() {
	app := iris.Default()
	stau, db = databases.InitDB() //数据库初始化
	f, _ := os.Create("iris.log")
	app.Logger().SetOutput(f)
	app.Configure(iris.WithConfiguration(iris.Configuration{
		//如果设置为true,当人为中断程序执行时,则不会自动正常将服务器关闭。如果设置为true,需要自己自定义处理。
		DisableInterruptHandler: false,
		//该配置项表示更正并将请求的路径重定向到已注册的路径
		//比如:如果请求/home/ 但找不到此Route的处理程序,然后路由器检查/home处理程序是否存在,如果是,(permant)将客户端重定向到正确的路径/home。
		//默认为false
		DisablePathCorrection: false,
		//
		EnablePathEscape:                  false,
		FireMethodNotAllowed:              false,
		DisableBodyConsumptionOnUnmarshal: false,
		DisableAutoFireStatusCode:         false,
		TimeFormat:                        "Mon,02 Jan 2006 15:04:05 GMT",
		Charset:                           "utf-8",
	}))
	app.Post("/irisfile", upfiles)
	app.Run(iris.Addr(":8080"))
}
func upfiles(ctx iris.Context) {
	path := "/home/"
	ctx.SetMaxRequestBodySize(maxSize)
	name := ctx.PostValue("name")
	password := ctx.PostValue("password")
	var res string
	if stau != 0 {
		sqlstring := "select * from UserInfo where username=" + "'" + username + "'"
		err := db.QueryRow(sqlstring).Scan(&u.UserInfo_id, &u.username, &u.password,   &u.token)
		if err != nil {
			res = "用户不存在"
		} else {
				if u.username == name {
					if u.password == password {
						defer img.Close()
						destimg := filepath.Join(path, imghead.Filename)
						_, errimg = ctx.SaveFormFile(imghead, destimg)
						if errimg != nil {
						ctx.JSON(iris.Map{
							"code": "500",
							"msg":  errimg.Error(),
						})
						return
						res =  pythonapp.Ocr()
					} else {
						res = "密码错误"
					}
				} else {
					res = "用户名不存在"
				}
			
			}

		}
	}
	
	ctx.JSON(iris.Map{
		"msg": res,
	})
	}
package pythonapp
var djstaue string
req := requests.Requests()
data := requests.Datas{
	"img":   jppath + "/" + "jp.jpg",
}
resp, errdj := req.Post("http://127.0.0.1:8080/starocr/", data) #django

安装Django框架

#安装python3.8
apt-get install python3.8
export PATH=$PATH:/usr/bin/python3.8
apt-get install pip //pip 附加很多GCC,G++
#安装Django
pip install Django
#创建项目 
django-admin startproject  xxx
cd xxx
#创建应用
python3 manage.py startapp xxx 

配置setting.py文件: ALLOWED_HOSTS = [‘修改为本机地址或服务器地址’]或者为服务器IP地址不含端口,INSTALLED_APPS 增加‘xxx’创建的应用。

测试:python3 manage.py runserver 127.0.0.1:8080
url和views:各个应用下创建视图函数和路由函数,项目名称下有总视图函数和路由函数,总路由函数中设置应用中的路由:include(‘xxx.urls’),name参数为反定向路由,name的值等于Html中{% url ‘name’%} ,本次实例用不到。

安装uwsgi

pip install uwsgi --no-cache-dir #禁用缓存,编译
#配置
vim uwsgi.ini
[uwsgi]
;对外提供 http 服务的端口,使用Ngrok时,使用http
;https=0,/server.crt,/server.key,HIGH  #ssl证书
;shared-socket = 0.0.0.0:443
http = 127.0.0.1:8005  
;使用nginx连接时使用,Django程序所在服务器地址
;socket=127.0.0.1:8005
; 通过该端口可以监控 uwsgi 的负载情况
;stats = 0.0.0.0:1004
;PYTHONHOME = /documents/MonitorCenter/MonitorCenter/venv/bin/python3
;home=/documents/MonitorCenter/MonitorCenter

;项目目录
chdir=/mysite
;项目中wsgi.py文件的目录,相对于项目目录
wsgi-file=mysite/wsgi.py
;home=/vcmt #虚拟环境下启用
;static-map=/static=/home/lxx/mysite/static
; 进程数
processes=5
; 线程数
threads=8
enable-threads=true
; 设置一个请求的超时时间(秒),如果一个请求超过了这个时间,则请求被丢弃
harakiri = 60
;置工作进程使用物理内存超过N MB就回收重启
reload-on-rss=2048
; 设置工作进程使用虚拟内存超过N MB就回收重启
reload-on-as= 1024
; uwsgi服务器的角色
master=True

; 存放进程编号的文件
module=mystite.wsgi

; 日志文件,因为uwsgi可以脱离终端在后台运行,日志看不见。我们以前的runserver是依赖终端的
daemonize=/logs/uwsgilog/uwsgi.log
stats=/logs/uwsgilog/uwsgi.status
pidfile=/logs/uwsgilog/uwsgi.pid
; 指定依赖的虚拟环境
;virtualenv=/home/python/.virtualenvs/django_py3

# 设置socket的监听队列大小(默认:100)。
listen=1024
# 设置用于uwsgi包解析的内部缓存区大小。默认是4k
buffer-size=65535
;设置每个工作进程处理请求的上限,达到上限时,将回收(重启)该进程。可以预防内存泄漏
max-requests=50
; 服务停止时自动移除unix Socket和pid文件
vacuum=true

uwsgi --ini uwsgi.ini 启动

Docker 移植服务器

#将容器生产镜像
sudo docker commit -a "署名" -m "备注信息" 容器ID  镜像名称
sudo docker commit -a "csdn" -m "2022年完成配置" 32ecdcd60e19 phone:1.0
#保存镜像,磁盘空间可能不足,必要时迁移数据腾空间
sudo docker save phone1.0 > test.tar
#上传服务器
pscp test.tar csdn@ip:路径
#服务器加载镜像
sudo docker load < test.tar
#创建新容器
sudo docker run -itd -p 192.168.1.101:80:8080 --name XXXXX phone1.0
#docker 端口映射修改 /var/lib/docker/containers/ID/hostconfig.json

实例说明

1.对外web由iris控制输出,映射docker端口,Python实例应用为OpenCV,paddleocr,go调用Python,一是引用go-python包(没尝试过);二是直接shell命令运行,三是Django,用于内部127.0.0.1,go request 请求Django;此实例应用第三中方案。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值