首先说需求

1、双拨,电信合约写着是供两台主机拨号使用,那我干嘛不双拨,双倍满足;实际家里200M带宽双拨后可以到500M。

2、科学上网。

3、nginx Http反向代理内部NAS(限制只有指定的域名才可以访问,其他域名都返回403),及其他服务,之前电信的443 端口还没被限制,同一个端口不同的域名即可访问不同的web站点,这样就可以直接通过https://域名/进到路由管理界面,以及Nas管理界面等。

4、Strongswan vpn服务器端,便于在其他地方访问家庭网络。

网上也有很多已经编译好的固件,但是要么功能太多,而且很多功能会有冲突;要么是功能太少,加个应用还缺包;所以打算自己编译。

根据 https://github.com/klever1988/nanopi-openwrt  创建了一个自己的 项目 https://github.com/huase2020/Nanopi-R2S ,移除了全部用不到的应用,只保留了一些基本的,然后再把ipset iptables 所需要的相关包加进去。

由于网上的科学上网的应用,比如 luci-app-passwall 功能多多少少 有些问题,所以就直接不使用这些应用。直接下载使用官方的应用,然后通过基本的iptables来控制数据流入流出即可。

ipset create proxy_list hash:ip family inet
for ip in $(cat /etc/huase/gfwipv4list.txt)
do 
	ipset add proxy_list "$ip"
done
	
ip rule add fwmark 1 table 100
ip route add local 0.0.0.0/0 dev lo table 100
	
iptables -t nat -A PREROUTING -p tcp -m set --match-set proxy_list dst -j REDIRECT --to-ports 12345
iptables -t nat -A OUTPUT -p tcp -m set --match-set proxy_list dst -j REDIRECT --to-ports 12345

ipset create proxy_list_v6 hash:ip family inet6
for ip in $(cat /etc/huase/gfwipv6list.txt)
do 
	ipset add proxy_list_v6 "$ip"
done
	
#支持ipv6
ip -6 rule add fwmark 1 table 100
ip -6 route add local ::/0 dev lo table 100

域名通过dsnmasq-full来解析并在解析的时候指定解析的服务器以及解析后的ip增加到ipset中,方法是在/etc/dnsmasq.conf 添加以下格式的数据即可。

server=/hp.com/127.0.0.1#5353
ipset=/hp.com/proxy_list,proxy_list_v6
#如果代理服务器端不支持ipv6 就直接屏蔽ipv6
#address=/hp.com/::

其中也遇到很多问题,首先是UDP 没办法 通过 TPROXY代理成功,目前只能代理TCP流量,DNS解析通过V2Ray转发到1.1.1.1来实现。

其次是 科学上网和 多拨的冲突,这个通过修改防火墙来实现,因为所有白名单中的流量都通过V2RAY,所以mwan3 就直接加个过滤-m set ! –match-set proxy_list

if iptables -t mangle -S OUTPUT | grep mwan3_hook &> /dev/null; then
         if ! iptables -t mangle -S OUTPUT | grep 'proxy_list dst -j mwan3_hook' &> /dev/null; then
             iptables -t mangle -D PREROUTING -j mwan3_hook
             iptables -t mangle -D OUTPUT -j mwan3_hook
             iptables -t mangle -A PREROUTING -m set ! --match-set proxy_list dst -j mwan3_hook
             iptables -t mangle -A OUTPUT -m set ! --match-set proxy_list dst -j mwan3_hook
         fi
fi

if ip6tables -t mangle -S OUTPUT | grep mwan3_hook &> /dev/null; then
	if ! ip6tables -t mangle -S OUTPUT | grep 'proxy_list dst -j mwan3_hook' &> /dev/null; then
		ip6tables -t mangle -D PREROUTING -j mwan3_hook
		ip6tables -t mangle -D OUTPUT -j mwan3_hook
		ip6tables -t mangle -A PREROUTING -m set ! --match-set proxy_list_v6 dst -j mwan3_hook
		ip6tables -t mangle -A OUTPUT -m set ! --match-set proxy_list_v6 dst -j mwan3_hook
	fi
fi

目前自编固件使用非常正常和稳定。

自16年购入该机器基础配置,换了cpu及内存,换了400W电源,买过两块阵列卡( HP P410 , LSI 9217-8i IT模式 ),两块显卡(  R7 250 E4 2G , GTX 1650 4G ),及7块硬盘(5块4T红盘,2块10T西数桌面盘),前前后后 ,折腾了无数次 ,现将我的经历分享给大家,我本身需求其实很简单。

1.需要一个存储服务器,由于使用频率不高,所以希望硬盘尽量休眠减少损耗,目前群辉(DSM)功能比较多,操作也比较方便。

2.需要一个HTPC用于连接电视播放视频。

3.偶尔可能需要一个虚拟机用于安装CentOS、Openwrt、Ubuntu之类的进行测试 。

刚开始的方案一

Gen8(4块4T红盘+1块512G SSD)在SSD中 安装Windows Server 2012 R2,并通过USB引导到第五块硬盘(gen8 不改线SSD接的是sata5)启动Windows,使用Hyper-V虚拟机虚拟DSM,然后把除了系统盘外的其他硬盘都直通给DSM。

缺点:直通给DSM的硬盘无法休眠,正常低功耗运行的时候功耗在60W左右(4块4T红盘+一块  R7 250 E4 2G 显卡),而且群辉版本最高到5.2。

试过硬盘由Windows控制,然后通过NFS共享给DSM,休眠 的问题是解决了,但是群辉的部分套件功能异常。于是想着换ESXI,通过直通 SATA控制器的方式给DSM,于是有了下面的方案。

方案二:ESXI(版本6.0,6.5的有BUG)直通SATA控制器给DSM,显卡直通给HTPC。

方案二第一阶段

ESXI安装在32G的TF卡中,SATA控制器直通给DSM,后其他系统就没有地方安装了,如果使用DSM通过NFS共享的空间安装,也会影响到DSM的休眠,所以想着看看能不能直接把USB 3.0用起来,让SSD通过USB3.0 连接到ESXI。最后参考 https://www.virten.net/2015/10/usb-devices-as-vmfs-datastore-in-vsphere-esxi-6-0/ 增加了一个SSD 的USB3.0存储。

通过SSH连接ESXI;暂停 ESXI的一个USB相关的服务,这个服务暂停后将无法在ESXI中直接添加USB设备给虚拟机,只能直通USB控制器。

/etc/init.d/usbarbitrator stop

停止这个服务的自动启动

 chkconfig usbarbitrator off

列出所有硬盘,在其中找到你的盘(通常6.0是mpx.vmhba开头,6.5是naa开头),我的盘是mpx.vmhba32:C0:T0:L0

ls /dev/disks/

把你的硬盘修改成GPT分区模式

partedUtil mklabel /dev/disks/mpx.vmhba32:C0:T0:L0 gpt

创建硬盘分区需要知道开始位置 和结束位置,一般开始位置都是2048,我们就只要得到结束位置即可

partedUtil getptbl mpx.vmhba32:C0:T0:L0

返回:

gpt
 1947 255 63 31293440

通过返回的值计算结束位置
1947 * 255 * 63 – 1 = 31278554
或者直接通过命令计算出来

eval expr $(partedUtil getptbl /dev/disks/mpx.vmhba32:C0:T0:L0 | tail -1 | awk '{print $1 " \* " $2 " \* " $3}') - 1

创建VMFS分区

partedUtil setptbl /dev/disks/mpx.vmhba32:C0:T0:L0 gpt "1 2048 31278554 AA31E02A400F11DB9590000C2911D1B8 0"

挂载VMFS分区

vmkfstools -C vmfs5 -S upan(usb显示名称) /dev/disks/mpx.vmhba32:C0:T0:L0:1

因为停掉了ESXI的一个USB服务,导致不能直接把USB设备添加到虚拟机,所以直通了USB2.0的#2驱动器给HTPC,千万不能直通#1,会导致tf卡也被直通进来导致Esxi无法写tf卡,任何配置信息的修改都将失败。

这样操作以后HTPC不休眠,只设置一定时间关闭显示器,就可以通过外接的鼠标键盘直接激活。DSM也获得了SATA的控制权,硬盘也可以休眠了,低功耗运行的时候功耗40W左右( 4块4T红盘+一块  R7 250 E4 2G 显卡+512G SSD )。

方案二第二阶段

虽然DSM可以休眠了,但是还是经常被无故唤醒,查各种日志,看是哪些服务做了什么,大部分都是系统做的,有人访问,会唤醒写日志,定时服务会唤醒,等等,于是就想看看能不能把系统独立出来,于是有了阶段二。

我增加了一块虚拟的100G的硬盘给DSM,然后把所有应用以及一些常用的数据放在这个盘里,其他的盘则进行电机休眠。具体设置休眠的方法参考我之前写的一篇文章

后来需要测试下一个程序的性能,买了块HP P410阵列卡及一个5盘位的硬盘笼子,挂了4块换下来的快要坏掉的SAS 300G(Dell 服务器上会提示异常,估计是坏道很多了,快要坏了)硬盘组raid0。这样担心原来200W电源不够,于是有换了400W的二手台达电源。这个时候硬盘笼子里多了个空位,于是又补了块4T的盘进去;后面测试完后,就把阵列卡移走了及sas盘移走了。

再后来玩了一段时间pt,原先的5块硬盘组的raid6空间不够用,于是又买了两块10T的硬盘加一块 LSI 9217-8i IT模式 阵列卡;之前买的HP P410 发热很大,硬盘没办法休眠,支持SAS盘; LSI 9217-8i IT模式 ,以为可以支持休眠,但经测试还是没办法休眠,不过群辉可以读到硬盘SMART信息。后来不玩PT,移除了阵列卡及两块硬盘,回到了基本的5块4T硬盘组 Raid6,准备等4T盘坏了后慢慢换成10T盘 ,也不打算再外挂第5块盘了,影响美观。

目前这样配置已经基本可以使用,硬盘也可以休眠了(这个休眠只是电机),休眠的时候功耗在50W不到(5块4T红盘组的Raid6+  R7 250 E4 2G 显卡+intel 512G SSD );近期因为需要输出4k 60HZ,换了 GTX 1650 4G显卡,也可以轻松直通给Windows使用,这张卡不需要设置就可以直通,只是直通后无法使用,需要在虚拟机 .vmx 配置文件中增加以下内容。

hypervisor.cpuid.v0 = “FALSE”

方案三

由于ESXI6.0需要占用4G左右的内存,分给DSM 1GB,剩余只有10GB给到HTPC,由于两个系统都直通了硬件,分配内存只能全部预留,跑XPlane 还是比较勉强,所以想着ESXI换成PVE,能再多2-3G的内存给到HTPC,于是有了方案三。

刚开始从官方下载了 PVE 最新版本6.2 安装还是很容易的,而且可以安装到usb2.0的U盘里,速度比tf卡快了很多。按网上普遍的方法直通的时候遇到了问题,直通sata和直通显卡后没办法启动会提示,网上说是HP的RMRR检查没办法禁用导致的,只能通过修改内核。

Device is ineligible for IOMMU domain attach due to platform RMRR requirement.  Contact your platform

按照 https://forum.proxmox.com/threads/compile-proxmox-ve-with-patched-intel-iommu-driver-to-remove-rmrr-check.36374/ 的方法重新编译了最新版的内核5.4.41-1,更新上去之后还是无法启动提示错误

kvm: -device vfio-pci,host=0000:00:1f.0,id=hostpci0.0,bus=pci.0,addr=0x10.0,multifunction=on: VFIO_MAP_DMA failed: Invalid argument
kvm: -device vfio-pci,host=0000:00:1f.0,id=hostpci0.0,bus=pci.0,addr=0x10.0,multifunction=on: vfio 0000:00:1f.0: failed to setup container for group 10: memory listener initialization failed: Region pc.bios: vfio_dma_map(0x7fe3c6a67200, 0xe0000, 0x20000, 0x7fe37de20000) = -22 (Invalid argument)

然后继续搜索相关错误,发现都没有解决方案。又想起 国内一网友 手残的拾君 ( https://www.bilibili.com/read/cv3899236 )既然能在 HPE SL250s Gen8 上成功,就试试看修改编译和他一样的内核看看,一试还真就成功了。

具体步骤整理如下:

一、修改编译内核

参考 https://blog.csdn.net/WeDone/article/details/104337318 搭建编译环境

更换 Debian 软件包源为 163,编辑 /etc/apt/sources.list 替换为:

deb http://mirrors.163.com/debian/ buster-updates main
deb-src http://mirrors.163.com/debian/ buster-updates main
deb http://mirrors.163.com/debian/ buster main non-free contrib
deb http://mirrors.163.com/debian/ buster-updates main non-free contrib
deb http://mirrors.163.com/debian/ buster-backports main non-free contrib
deb-src http://mirrors.163.com/debian/ buster main non-free contrib
deb-src http://mirrors.163.com/debian/ buster-updates main non-free contrib
deb-src http://mirrors.163.com/debian/ buster-backports main non-free contrib
deb http://mirrors.163.com/debian-security/ buster/updates main non-free contrib
deb-src http://mirrors.163.com/debian-security/ buster/updates main non-free contrib

执行

sudo apt-get update && apt-get install -y gnupg2 wget

加入 Proxmox 软件包源:

wget -qO - http://download.proxmox.com/debian/proxmox-ve-release-6.x.gpg | sudo apt-key add
echo "deb http://download.proxmox.com/debian/pve buster pve-no-subscription " | sudo tee /etc/apt/sources.list.d/buster-pvetest.list
sudo apt-get update

安装编译环境:

sudo apt-get -y install build-essential asciidoc binutils bzip2 gawk gettext git libncurses5-dev libz-dev patch unzip zlib1g-dev lib32gcc1 libc6-dev-i386 subversion flex uglifyjs git-core gcc-multilib p7zip p7zip-full msmtp libssl-dev texinfo libglib2.0-dev xmlto qemu-utils upx libelf-dev autoconf automake libtool autopoint device-tree-compiler screen

sudo apt install python3-dev  python3-sphinx lintian bc bison libdw-dev libiberty-dev libnuma-dev libslang2-dev lz4 rsync  libpve-common-perl dh-make 

根据:https://forum.proxmox.com/threads/compile-proxmox-ve-with-patched-intel-iommu-driver-to-remove-rmrr-check.36374/ 补齐部分包

apt-get install git nano screen patch fakeroot build-essential devscripts libncurses5 libncurses5-dev libssl-dev bc flex bison libelf-dev libaudit-dev libgtk2.0-dev libperl-dev asciidoc xmlto gnupg gnupg2 rsync lintian debhelper libdw-dev libnuma-dev libslang2-dev sphinx-common asciidoc-base automake cpio dh-python file gcc kmod libiberty-dev libpve-common-perl libtool perl-modules python-minimal sed tar zlib1g-dev lz4

然后按 手残的拾君 ( https://www.bilibili.com/read/cv3899236 ) 的方法获取到指定的版本并进行修改产生一个diff的path文件

获取指定的版本(使用5.0.21-2 9a85bc6293ad2efb2930dde2b7123b1e008af11a 还是有些问题,不知道是我设置问题还是比的问题,系统选Windows后Bios选UEFI,开机会超时。 然后又去看看新的版本这里经过测试发现6.1的版本5.3.18-2-pve 9100f5656d3e94df55b53f6a2e33a6fc8f0fc3f2 的内核也可以使用)

git clone git://git.proxmox.com/git/pve-kernel.git
cd ./pve-kernel/
git reset --hard 9100f5656d3e94df55b53f6a2e33a6fc8f0fc3f2

修改的方法见 手残的拾君 ( https://www.bilibili.com/read/cv3899236 ) 或者 https://forum.proxmox.com/threads/compile-proxmox-ve-with-patched-intel-iommu-driver-to-remove-rmrr-check.36374/

编译

make V=s

二、安装核心,卸载自带的核心

上传到pve,然后安装核心

dpkg -i *.deb

卸载核心:

apt-get remove  5.4.34-1-pve -y

直接卸载会提示错误,我们按给的提示操作即可。

touch '/please-remove-proxmox-ve'
apt purge proxmox-ve -y
apt-get remove  5.4.34-1-pve -y 

接下来开启直通支持编辑 /etc/default/grub

找到GRUB_CMDLINE_LINUX_DEFAULT =”quiet” 改成

GRUB_CMDLINE_LINUX_DEFAULT =”quiet intel_iommu=on video=efifb:off”

更新引导

update-grub

编辑/etc/modules 在最下面几行添加

vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

一个一行,写入后保存退出,然后把显卡加入黑名单,并更新。

三、然后按照 https://blog.51cto.com/12242014/2382885 的步骤直通显卡

运行lspci 找到显卡的编号,我这里是07

lspci

执行 lspci -n -s 07:00 获取 07的两组id

 lspci -n -s 00

把获取到的两个id写入/etc/modprobe.d/vfio.conf 禁用显卡并打开不安全的中断

echo "options vfio-pci ids=10de:1f82,10de:10fa" > /etc/modprobe.d/vfio.conf
echo "options vfio_iommu_type1 allow_unsafe_interrupts=1" > /etc/modprobe.d/vfio.conf

把显卡加入黑名单

echo "blacklist nvidiafb" >> /etc/modprobe.d/pve-blacklist.conf
echo "blacklist nouveau" >> /etc/modprobe.d/pve-blacklist.conf
echo "blacklist nvidia" >> /etc/modprobe.d/pve-blacklist.conf
echo "blacklist radeon" >> /etc/modprobe.d/pve-blacklist.conf
echo "blacklist amdgpu" >> /etc/modprobe.d/pve-blacklist.conf

运行以下命令加入必要的配置

echo 1 > /sys/module/kvm/parameters/ignore_msrs
echo "options kvm ignore_msrs=1">>/etc/modprobe.d/kvm.conf

更新并重启

update-initramfs -k all -u && reboot

添加虚拟机,BIOS选择 UEFI,机器类型选q35,添加显卡的时候要勾选 主GPU 及 PCI-Express

刚开始的时候遇到了以下一些问题

1.usb连接的声卡(Monitor 03 US Dragon),声卡不能移除,移除会导致虚拟机死机。之前连在DELL U2720QM上,显示器一关闭usb会自动断开就会死机,试了半天才找到是声卡。没办法只能移移至Gen8后面USB2.0接口长时间连接。

2.usb连接的罗技优联,移除后不能再恢复,只能通过移至Gen8 后面的usb2.0接口长时间连接。

3.能连的usb口最多5个,还不能直通usb controller。usb 3.0的Controller 连着数据U盘,内置的usb2.0连接着系统U盘这个和后面的2.0接口是同一个Controller.

4.最头疼的是 显卡虽然能用,但是性能好像大打折扣,鲁大师跑分5000多。

5.群辉怎么弄都不休眠,后来无意中发现Video Station一直在索引,影视信息一直没出来,查资料发现检索影视信息的网站被墙了。

后来修改了方案,系统安装在tf卡上(安装的时候swap分区设置成0,后续自己在usb3.0的ssd上创建一个swap文件挂載),直接通过pci直通后面的usb2.0 接口(直通的是#2控制器)给Win10虚拟机,解决了1,2问题。因为有usb2.0可以插分线器,基本也解决了问题3接口不够用的问题。

更换了内核 5.3.18-2-pve 解决了问题4,现在鲁大师跑分恢复到10万分,还是不及用Esxi 时候的11万分。

目前配置 :

DSM:1.5G内存,直通了 SATA控制器(5块4T硬盘)+原来的ESXI中100G 放在u盘中的系统盘。

Win10:12G内存,直通usb 2.0 #2控制器+显卡

存在的问题:通过usb 直通 u盘 会导致虚拟机系统识别不了,整体性能鲁大师跑分在cpu 显卡 都低于Esxi 10%左右。

我这边用到的系统安装包以及编译好的内核

https://pan.baidu.com/s/1kubhPLL0c3rrnj-ovbe0KQ

提取码:hkvc

使用到以下软件

kmod-macvlan(用于虚拟接口), mwan3 (用于负载均衡), luci-app-mwan3(mwan3 界面)

先登录ssh。

更新软件包

opkg update

安装必要的软件

opkg install  kmod-macvlan luci-app-mwan3

创建虚拟接口,以下指令 可以放在 /etc/rc.local 里 exit 前面,这样系统自动启动后就会运行

ip link add link eth0 vth1 type macvlan
ifconfig vth1 hw ether 00:00:00:00:00:01
ifconfig vth1 up

在管理界面 网络》接口 创建两个pppoe链接,其中一个接口选择eth0,另一个选择 vth1

在管理界面 网络》Load Balancing 配置中启用 两个接口的负载均衡,并在Member 里设置好各个接口的Weight,如果需要平均分配只需要设置一致即可。

群辉系统自带的硬盘休眠会因为读写数据而导致所有硬盘都被唤醒。这里介绍使用Linux自身休眠部分硬盘的方法。

1、添加一块用于做系统的盘,可以是虚拟盘,然后把应用都安装在这个虚拟盘创建的存储空间中,检查需要休眠的硬盘上有没有运行着会经常读写数据的套件,比如Download Station的电驴,如果有需要把目录移到别的不需要休眠的硬盘上。

2、关闭系统自带的硬盘休眠

3、 用root账号登陆ssh,通过 “fdisk -l” 命令找到需要休眠的硬盘位置,这里我们假设是sdb、sdc、sdd、sde,通过 “ cat /proc/mdstat” 命令我们发现 md0系统分区挂载了全部盘,md1 swap分区也挂载了全部盘,这里我们把md0和md1中除了系统盘外的其他硬盘都移除。然后设置下系统启动5分钟后再设置硬盘自动休眠,如果立马设置会导致硬盘直接就进入省电模式(估计运行的时候系统并没有读写硬盘数据)。

具体的方法就是 修改 /etc/rc文件在最后 “ exit 0 ” 前面增加

mdadm --manage /dev/md0 --fail /dev/sdb1
mdadm --manage /dev/md0 --fail /dev/sdc1
mdadm --manage /dev/md0 --fail /dev/sdd1
mdadm --manage /dev/md0 --fail /dev/sde1
mdadm --manage /dev/md1 --fail /dev/sdb2
mdadm --manage /dev/md1 --fail /dev/sdc2
mdadm --manage /dev/md1 --fail /dev/sdd2
mdadm --manage /dev/md1 --fail /dev/sde2

mdadm --manage /dev/md0 --remove /dev/sdb1
mdadm --manage /dev/md0 --remove /dev/sdc1
mdadm --manage /dev/md0 --remove /dev/sdd1
mdadm --manage /dev/md0 --remove /dev/sde1
mdadm --manage /dev/md1 --remove /dev/sdb2
mdadm --manage /dev/md1 --remove /dev/sdc2
mdadm --manage /dev/md1 --remove /dev/sdd2
mdadm --manage /dev/md1 --remove /dev/sde2

(
sleep 300
hdparm -S 241 /dev/sdb
hdparm -S 241 /dev/sdc
hdparm -S 241 /dev/sdd
hdparm -S 241 /dev/sde
)&

4.重启DSM,重启后会提示系统分区异常。

效果:设置了省电模式的硬盘,只要不读写,都会在指定的时间(30分钟,可以通过hdparm -S后面的参数调整,240 20分钟,241 30分钟)后电机停止转动,需要的时候会自动启动。一般情况下系统读写数据不会唤起休眠的硬盘,只有当与休眠硬盘相关套件读写数据的时候才会唤起。像Photo Station、Video Station、Monments、Drive即使数据在休眠的硬盘上,只要不使用,也不会唤起硬盘。

1.Raid1 一般由多块盘组成,需要把其他硬盘在关机的情况下先移除,然后再启动,这个时候系统会报故障,不需要理会。

2.用root账号登陆ssh,使用指令

cat /proc/mdstat 

查询阵列表,找到需要转换阵列。


md0、md1被系统使用,md2开始是 我们的硬盘阵列。

3.通过指令

mdadm --grow --raid-devices=1 --force /dev/md2

转换阵列为Basic,/dev/md2是我们需要转换的阵列

转换完成后阵列将转换成Basic,并不再有故障提示

一、准备工作

yum -y update
yum -y install net-tools
yum install epel* -y

二、安装GNOME桌面系统、xrdp、vnc

yum -y groups install "GNOME Desktop"
yum --enablerepo=epel -y install xrdp
yum -y install tigervnc tigervnc-server

三、修改xrdp配置

sed -i "s/max_bpp=32/max_bpp=24/g" /etc/xrdp/xrdp.ini

四、配置selinux

chcon -t bin_t /usr/sbin/xrdp
chcon -t bin_t /usr/sbin/xrdp-sesman

五、启动xrdp并设置自动启动

systemctl start xrdp
systemctl enable xrdp

六、配置防火墙

firewall-cmd --zone=public --add-port=3389/tcp --permanent
firewall-cmd --reload

一、准备工作

yum -y update

创建一个 redmine 账号用于启动 redmine

adduser redmine

获取Redmine 并解压缩

cd /home/redmine/
wget http://www.redmine.org/releases/redmine-3.4.6.tar.gz
tar -zxvf redmine-3.4.6.tar.gz
mv redmine-3.4.6/* /home/redmine/
rm -rf redmine-3.4.6.tar.gz
rm -rf redmine-3.4.6

二、安装 环境

1、安装Ruby

yum -y install epel-release curl-devel sqlite-devel libyaml-devel
gpg –keyserver hkp://keys.gnupg.net –recv-keys D39DC0E3
curl -L https://get.rvm.io | bash -s stable
source /etc/profile.d/rvm.sh
rvm reload
rvm install 2.3.3 #安装redmine-3.4.6 对应的 ruby
rvm use ruby-2.3.3

2、安装Rake 和 Rails

gem source -r https://rubygems.org/
gem source -a https://gems.ruby-china.org/
gem install rake -v 12.0.0
gem install rails -v 4.2.8

3、安装其他的包

yum -y install mysql-devel postgresql-devel ImageMagick-devel

三、配置Redmine

cd /home/redmine/config/
cp database.yml.example database.yml
vi database.yml #修改数据库配置

这里我使用Postgresql 数据库 只需要把之前的 production 注释掉,并配置

四、安装Redmine

cd  /home/redmine/
bundle install #安装依赖
rake db:migrate RAILS_ENV=”production”
rake redmine:load_default_data RAILS_ENV=”production” #这时候会提示你选择语言,输入:zh
rake generate_secret_token #为rails生产cookie秘钥
chown -R redmine:redmine *
chmod -R 700 *

五、启动Redmin

su – redmine -c “/usr/local/rvm/rubies/ruby-2.3.3/bin/ruby /home/redmine/bin/rails server webrick -e production -d”

六、用Mongrel组件来替换Webrick

gem install mongrel -v 1.2.0.pre2 –pre –source https://gems.ruby-china.org/
在gemfile中加入
gem “mongrel”,”~> 1.2.0.pre2″
删除gemfile.lock文件,重新执行
bundle install
启动
su – redmine -c “/usr/local/rvm/rubies/ruby-2.3.3/bin/ruby /home/redmine/bin/rails server mongrel -e production -d”

七、配置Nginx代理访问,并修改nginx http配置,设置 client_max_body_size 1024M,以保证可以正常上传文件

location / {
proxy_pass http://localhost:3000/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}