我们的产品: https://canvaslms.zut.edu.cn/
开始接到部署 Canvas-lms 这个开源教学平台 的任务时, 还不知道 Canvas-lms 是什么 , 网上关于他的介绍也比较少,上面只给了Canvas GitHub的源码地址和使用指南
Canvas-lms系统的代码:代码:https://github.com/instructure/canvas-lms
Canvas-lms有中文指南:指南:https://guides.instructure.com/
其他没有任何提示,就开始自己摸索,试过测试版(Quick Start),也试过生产版(Production Start),以及尝试 Docker部署, 整整七天, 做过无数次尝试,遇到过各种错误,几经奔溃边缘, 有解决的也有没解决的, 但幸运的是最终生产版成功了,恭喜各位付出过努力的人!!!
废话不多说,下面分享下部署全过程以及遇到的问题: 注意: 本文章参考Canvas官方(Production Start)部署教程, 加上自己的一些小经验,绝大部分内容来自 Canvas官方(Production Start)部署教程
部署开始:
首先介绍下我的部署环境,Ubuntu 14.04 LTS, 说点题外话(官方建议使用最新版的Ubuntu LTS, 但亲测最新版安装一些插件的时候插件版本跟要求的版本不太一致,会遇到很多问题, 所以建议用Ubuntu 14.04), 所有部署工作都在这台机器上完成, 另外,根据官方部署说明:
Canvas likes RAM. While it will run on smaller configurations, we recommend a server with at least 8GB RAM, especially if everything is being run on one server.
意思是这台机器的内存最好是8G以上
一. 安装Postgres, Canvas 使用的数据库
canvas@canvas-machine:~$ sudo apt-get install postgresql-9.5
直接执行一般会遇到错误(Package ‘postgresql-9.5’ has no installation candidate),这个在测试版部署教程(Quick Start)根据不同系统有不同解决方案, 这里我只介绍Ubuntu14.04 LTS 的解决方案(两步):
1. 创建存储库文件**/etc/apt/sources.list.d/pgdg.list,并在该文件中添加下面这行
**
deb http://apt.postgresql.org/pub/repos/apt/ trusty-pgdg main
2. 导入存储库签名密钥,并更新包列表, 执行下面命令即可实现
canvas@canvas-machine:~$ wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -sudo apt-get update
二. 配置Postgres
1. 为 Canvas 创建一个数据库普通用户canvas1(非超级用户,用户名可自定义,我这为 canvas1),并为canvas1用户创建一个数据库( canvas_production )执行以下命令即可
# 创建 canvas1 用户, 并设置用户密码
canvas@canvas-mechine:~$ sudo -u postgres createuser canvas1 --no-createdb --no-superuser --no-createrole --pwprompt
# 为 canvas1 创建数据库 canvas_production
canvas@canvas-mechine:~$ sudo -u postgres createdb canvas_production --owner=canvas1
2. 将系统用户名设置为 postgres 超级用户
canvas@canvas-mechine:~$ sudo -u postgres createuser $USER
canvas@canvas-mechine:~$ sudo -u postgres psql -c "alter user $USER with superuser" postgres
三. 获取Canvas 在 GitHub上 的源码
1. 安装Git
canvas@canvas-mechine:~$ sudo apt-get install git-core
2. 获取Canvas的最新源代码, 官方建议我们将代码放在 /var 这个目录下,所以我们切到 /var目录, 并 clone 源码
canvas@canvas-mechine:~$ cd /var
canvas@canvas-mechine:/var$ sudo git clone https://github.com/instructure/canvas-lms.git canvas
canvas@canvas-mechine:/var$ cd canvas
canvas@canvas-mechine:/var/canvas$ git checkout stable
3. 将 /var/canvas 文件夹及其子文件 的所有者改为 当前系统用户 canvas, 因为我们所有部署工作都是通过 canvas 这个用户来完成的
canvas@canvas-mechine:/var$ sudo chown -R canvas /var/canvas
四. 依赖安装
1. 首先,添加PPA以获取所需的Ruby版本,执行下面三条命令
canvas@canvas-mechine:~$ sudo apt-get install software-properties-common
canvas@canvas-mechine:~$ sudo add-apt-repository ppa:brightbox/ruby-ng
canvas@canvas-mechine:~$ sudo apt-get update
2. 安装 Ruby2.4 以及其他一些依赖
canvas@canvas-mechine:~$ sudo apt-get install ruby2.4 ruby2.4-dev zlib1g-dev libxml2-dev libsqlite3-dev postgresql libpq-dev libxmlsec1-dev curl make g++
3. 安装 Node.js,执行下面两条命令
canvas@canvas-mechine:~$ curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
canvas@canvas-mechine:~$ sudo apt-get install nodejs
4. 安装 Bundler, Canvas的大部分依赖都是Ruby Gems。Ruby Gems是一个特定于Ruby的包管理系统, Canvas使用Bundler 作为 Ruby Gems 之上的附加层来管理版本化的依赖项
canvas@canvas-mechine:/var/canvas$ sudo gem install bundler --version 1.13.6
5. 通过 Bundler 安装其他一些依赖,此步可能会很长时间, 也较容易出错,如果出错,就再次执行这条命令, 一般两到三遍后就能执行成功, 如果执行多次还不成功, 执行这条命令: bundle update
若出错, 请参考我的博客: https://blog.csdn.net/zcf980/article/details/83714558
canvas@canvas-mechine:/var/canvas$ bundle install --path vendor/bundle
五. 安装 yarn
官方解释: Canvas now prefers yarn instead of npm.(注意: 截至2018.9.15,所需的 yarn 版本为1.9.4)
1. 安装 yarn, 执行以下三条命令
canvas@canvas-mechine:/var/canvas$ curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
canvas@canvas-mechine:/var/canvas$ echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
canvas@canvas-mechine:/var/canvas$ sudo apt-get update && sudo apt-get install yarn=1.9.4-1
2. 安装 python
canvas@canvas-mechine:/var/canvas$ sudo apt-get install python
3. 安装 node 模块,**Warn: 此步耗时较长,在最后一个点的时候需要很长时间(可能半小时以上), 请不要中断操作,**如果出错, 再次执行这条命令, 一般执行两到三遍后可执行成功
canvas@canvas-mechine:/var/canvas$ yarn install
六. Canvas 配置
1. 默认配置: Rails 代码依赖于少量配置文件,我们用 Canvas 为我们提供的默认的 Rails 配置文件即可,我们只需要更改文件名即可,执行下面这条命令:
canvas@canvas-mechine:/var/canvas$ for config in amazon_s3 database \
delayed_jobs domain file_store outgoing_mail security external_migration; \
do cp config/$config.yml.example config/$config.yml; done
2. 动态设置配置(官网谷歌翻译结果,不懂),反正就是Canvas 不使用 consul 集群的时候需要的配置文件,这里我们 只修改文件名,使这个文件成为一个配置文件即可, 不修改文件内容
canvas@canvas-mechine:/var/canvas$ cp config/dynamic_settings.yml.example config/dynamic_settings.yml
# 下面的命令可不执行, nano 是 编辑文件的命令, 相当于 vim 和 gedit 不过这里的配置文件只能用这条命令修改, 用 vim 会出现无法输入, 或者 Readonly 的情况(超级用户也不行), 所以如果你有修改的需求,最好用 nano 编辑
canvas@canvas-mechine:/var/canvas$ nano config/dynamic_settings.yml
3. 数据库配置: 在config / database.yml中,修改 production部分的 username 和 password 为第二步你设置的用户名和密码
canvas@canvas-mechine:/var/canvas$ cp config/database.yml.example config/database.yml
canvas@canvas-mechine:/var/canvas$ nano config/database.yml
文件原文如下:
# do not create a queue: section for your test environment
test:
adapter: postgresql
encoding: utf8
database: canvas_test
host: localhost
username: canvas
timeout: 5000
development:
adapter: postgresql
encoding: utf8
database: canvas_development
timeout: 5000
production:
adapter: postgresql
encoding: utf8
database: canvas_production
host: localhost
username: canvas # 第二步设置的用户名
password: your_password # 第二步设置的密码
timeout: 5000
4. 传出邮件配置, 配置外发邮件的SMTP服务器, 此配置用于配置一个账户,使canvas通过这个账户发送邮件给此canvas的用户
执行下面两条命令,复制 和 修改文件:
canvas@canvas-mechine:/var/canvas$ cp config/outgoing_mail.yml.example config/outgoing_mail.yml
canvas@canvas-mechine:/var/canvas$ nano config/outgoing_mail.yml
修改后内容如下(只修改 production部分): 此演示的是网易邮箱,其他邮箱配置请参考相应的邮箱SMTP配置相关内容
development:
address: "smtp.example.com"
port: "25"
user_name: "user"
password: "password"
authentication: "plain" # plain, login, or cram_md5
domain: "example.com"
outgoing_address: "canvas@example.com"
default_name: "Instructure Canvas"
# or to use sendmail --
#
# development:
# delivery_method: "sendmail"
test:
delivery_method: "test"
production:
address: "smtp.126.com" # 126的 smtp 地址
port: "25" # 126 默认端口
user_name: "zcf" # 126 邮箱的账号,不带@126.com,实际发送会与下面domain拼接成zcf@126.com
password: "password" # 126邮箱设置的客户端授权密码
authentication: "plain" # plain, login, or cram_md5
domain: "126.com"
outgoing_address: "canvas@126.com" # 用户收到canvas发送的邮件时, 邮件会显示此邮件来自outgoing_address
# ssl: true # 此配置官网未提供, 但官网配置腾讯smtp是发不了邮件的, 还需要加这句
default_name: "Instructure Canvas"
# If receiving mail from multiple inboxes (see incoming_mail.yml.example),
# you'll want to include those addresses in a reply_to_addresses array so
# Canvas will select the Reply-To field of outgoing messages from all of the
# incoming mailboxes.
multiple_inboxes:
address: "smtp.example.com"
port: "25"
user_name: "user"
password: "password"
authentication: "plain" # plain, login, or cram_md5
domain: "example.com"
outgoing_address: "canvas@example.com"
default_name: "Instructure Canvas"
reply_to_addresses:
- "canvas1@example.com"
- "canvas2@example.com"
- "canvas3@example.com"
- "canvas4@example.com"
5. 可信URL配置, 只修改production部分
canvas@canvas-mechine:/var/canvas$ cp config/domain.yml.example config/domain.yml
canvas@canvas-mechine:/var/canvas$ nano config/domain.yml
配置文件内容如下:
test:
domain: localhost
development:
domain: "localhost:3000"
production:
domain: "canvas.example.com" # 配置可信域名
# whether this instance of canvas is served over ssl (https) or not
# defaults to true for production, false for test/development
ssl: true
# files_domain: "canvasfiles.example.com" # 配置此域名, 只有含此域名的请求才能上传文件
6. 安全配置: 给production 部分 的 encryption_key 设置一个至少20个字符的随机字符串(长度大于20即可)
canvas@canvas-mechine:/var/canvas$ cp config/security.yml.example config/security.yml
canvas@canvas-mechine:/var/canvas$ nano config/security.yml
七. 生成资源(初始化资源文件)
1. Canvas需要先构建一些资产才能正常工作。首先,创建将存储生成的文件的目录
canvas@canvas-mechine:/var/canvas$ cd /var/canvas
canvas@canvas-mechine:/var/canvas$ mkdir -p log tmp/pids public/assets app/stylesheets/brandable_css_brands
canvas@canvas-mechine:/var/canvas$ touch app/stylesheets/_brandable_variables_defaults_autogenerated.scss
canvas@canvas-mechine:/var/canvas$ touch Gemfile.lock
canvas@canvas-mechine:/var/canvas$ touch log/production.log
2. 再运行下面的命令(最后一条命令中的 canvasuser 为当前部署 canvas 的操作系统用户)
canvas@canvas-mechine:/var/canvas$ yarn install
canvas@canvas-mechine:/var/canvas$ RAILS_ENV=production bundle exec rake canvas:compile_assets
canvas@canvas-mechine:/var/canvas$ sudo chown -R canvasuser public/dist/brandable_css
3. 如果你修改了 cnavas 的 源码, 最好执行下面的这条命令,然后在启动项目, 才能让你的修改完全生效
canvas@canvas-mechine:/var/canvas$ RAILS_ENV=production bundle exec rake brand_configs:generate_and_upload_all
八. 初始化数据库
1. 我们需要生成数据库表 并 在数据库中添加初始数据。在canvas安装根目录执行下面命令即可,执行命令后, 会要求你设置 canvas 默认管理员登录的电子邮件地址 和 登录密码, 还会设置一个登陆后的提示名称, 通常是您的组织名称,最后选择是否向canvas开发团队反馈使用信息:opt_in 所有信息,opt_out 不反馈任何信息 或 匿名反馈
canvas@canvas-mechine:/var/canvas$ RAILS_ENV=production bundle exec rake db:initial_setup
九. 配置Apache
1. 安装apache和passenger软件包, 如果执行以下安装命令报错(如:找不到包):请参考以下官方链接
https://www.phusionpassenger.com/library/install/apache/install/oss/trusty/
canvas@canvas-mechine:/var/canvas$ sudo apt-get install passenger libapache2-mod-passenger apache2
2. 启用 mod_rewrite (a2enmod 是 apache-2.4-common 包下的一个工具)
canvas@canvas-mechine:/var/canvas$ sudo a2enmod rewrite
3. 启用 passenger
canvas@canvas-mechine:/var/canvas$ sudo a2enmod passenger
4. 配置 passenger ( libapache2-mod-passenger软件包应该将符号链接放在*/ etc / apache2 / mods-enabled /中,名为passenger.conf*和 passenger.load),
(1)修改 / etc / apache2 / mods-enabled / 下的 passenger.load , 修改后的文件内容
### Begin automatically installed Phusion Passenger load snippet ###
LoadModule passenger_module /usr/lib/apache2/modules/mod_passenger.so
### 如何自学黑客&网络安全
#### 黑客零基础入门学习路线&规划
**初级黑客**
**1、网络安全理论知识(2天)**
①了解行业相关背景,前景,确定发展方向。
②学习网络安全相关法律法规。
③网络安全运营的概念。
④等保简介、等保规定、流程和规范。(非常重要)
**2、渗透测试基础(一周)**
①渗透测试的流程、分类、标准
②信息收集技术:主动/被动信息搜集、Nmap工具、Google Hacking
③漏洞扫描、漏洞利用、原理,利用方法、工具(MSF)、绕过IDS和反病毒侦察
④主机攻防演练:MS17-010、MS08-067、MS10-046、MS12-20等
**3、操作系统基础(一周)**
①Windows系统常见功能和命令
②Kali Linux系统常见功能和命令
③操作系统安全(系统入侵排查/系统加固基础)
**4、计算机网络基础(一周)**
①计算机网络基础、协议和架构
②网络通信原理、OSI模型、数据转发流程
③常见协议解析(HTTP、TCP/IP、ARP等)
④网络攻击技术与网络安全防御技术
⑤Web漏洞原理与防御:主动/被动攻击、DDOS攻击、CVE漏洞复现
**5、数据库基础操作(2天)**
①数据库基础
②SQL语言基础
③数据库安全加固
**6、Web渗透(1周)**
①HTML、CSS和JavaScript简介
②OWASP Top10
③Web漏洞扫描工具
④Web渗透工具:Nmap、BurpSuite、SQLMap、其他(菜刀、漏扫等)
恭喜你,如果学到这里,你基本可以从事一份网络安全相关的工作,比如渗透测试、Web 渗透、安全服务、安全分析等岗位;如果等保模块学的好,还可以从事等保工程师。薪资区间6k-15k
到此为止,大概1个月的时间。你已经成为了一名“脚本小子”。那么你还想往下探索吗?
如果你想要入坑黑客&网络安全,笔者给大家准备了一份:282G全网最全的网络安全资料包评论区留言即可领取!
**7、脚本编程(初级/中级/高级)**
在网络安全领域。是否具备编程能力是“脚本小子”和真正黑客的本质区别。在实际的渗透测试过程中,面对复杂多变的网络环境,当常用工具不能满足实际需求的时候,往往需要对现有工具进行扩展,或者编写符合我们要求的工具、自动化脚本,这个时候就需要具备一定的编程能力。在分秒必争的CTF竞赛中,想要高效地使用自制的脚本工具来实现各种目的,更是需要拥有编程能力.
如果你零基础入门,笔者建议选择脚本语言Python/PHP/Go/Java中的一种,对常用库进行编程学习;搭建开发环境和选择IDE,PHP环境推荐Wamp和XAMPP, IDE强烈推荐Sublime;·Python编程学习,学习内容包含:语法、正则、文件、 网络、多线程等常用库,推荐《Python核心编程》,不要看完;·用Python编写漏洞的exp,然后写一个简单的网络爬虫;·PHP基本语法学习并书写一个简单的博客系统;熟悉MVC架构,并试着学习一个PHP框架或者Python框架 (可选);·了解Bootstrap的布局或者CSS。
**8、超级黑客**
这部分内容对零基础的同学来说还比较遥远,就不展开细说了,附上学习路线。
![img](https://img-blog.csdnimg.cn/img_convert/3fd39c2ba8ec22649979f245f4221608.webp?x-oss-process=image/format,png)
#### 网络安全工程师企业级学习路线
![img](https://img-blog.csdnimg.cn/img_convert/931ac5ac21a22d230645ccf767358997.webp?x-oss-process=image/format,png)
如图片过大被平台压缩导致看不清的话,评论区点赞和评论区留言获取吧。我都会回复的
视频配套资料&国内外网安书籍、文档&工具
当然除了有配套的视频,同时也为大家整理了各种文档和书籍资料&工具,并且已经帮大家分好类了。
![img](https://img-blog.csdnimg.cn/img_convert/153b2778a3fe5198265bed9635d63469.webp?x-oss-process=image/format,png)
一些笔者自己买的、其他平台白嫖不到的视频教程。
![img](https://img-blog.csdnimg.cn/img_convert/32eb4b22aa740233c5198d3c161b37e8.webp?x-oss-process=image/format,png)
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化资料的朋友,可以点击这里获取](https://bbs.csdn.net/topics/618540462)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**