diff --git a/README.md b/README.md index d2229ad..53341c8 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -## WebVirtCloud +# WebVirtCloud ###### Python3 & Django 2.2 ## Features @@ -25,10 +25,21 @@ wget -O - https://clck.ru/9VMRH | sudo tee -a /usr/local/bin/gstfsd sudo service supervisor restart ``` -### Description +## Description WebVirtCloud is a virtualization web interface for admins and users. It can delegate Virtual Machine's to users. A noVNC viewer presents a full graphical console to the guest domain. KVM is currently the only hypervisor supported. +## Quick Install with Installer (Beta) +Install an OS and run specified commands. Installer supported OSes: Ubuntu 18.04, Debian 10, Centos/OEL/RHEL 8. +It can be installed on a virtual machine, physical host or on a KVM host. +```bash +wget https://raw.githubusercontent.com/retspen/webvirtcloud/master/install.sh +chmod 744 install.sh +# run with sudo or root user +./install.sh +``` + +## Manual Installation ### Generate secret key You should generate SECRET_KEY after cloning repo. Then put it into webvirtcloud/settings.py. @@ -95,7 +106,7 @@ sudo sed -r "s/SECRET_KEY = ''/SECRET_KEY = '"`python3 /srv/webvirtcloud/conf/ru ``` #### Start installation webvirtcloud -``` +```bash virtualenv-3 venv source venv/bin/activate pip3 install -r conf/requirements.txt @@ -306,7 +317,7 @@ Edit WS_PUBLIC_PORT at settings.py file to expose redirect to 80 or 443. Default WS_PUBLIC_PORT = 80 ``` -### How To Update +## How To Update ```bash # Go to Installation Directory cd /srv/webvirtcloud @@ -333,7 +344,7 @@ Run tests python manage.py test ``` -### Screenshots +## Screenshots Instance Detail: Instance List:
@@ -343,6 +354,6 @@ Other:
-### License +## License WebVirtCloud is licensed under the [Apache Licence, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.html). diff --git a/admin/forms.py b/admin/forms.py index 6856d7b..72e6d0a 100644 --- a/admin/forms.py +++ b/admin/forms.py @@ -73,13 +73,14 @@ class UserForm(forms.ModelForm): def __init__(self, *args, **kwargs): super(UserForm, self).__init__(*args, **kwargs) - password = ReadOnlyPasswordHashField(label=_("Password"), - help_text=format_lazy(_("""Raw passwords are not stored, so there is no way to see - this user's password, but you can change the password - using this form."""), - reverse_lazy('admin:user_update_password', args=[self.instance.id,])) - ) - self.fields['Password'] = password + if self.instance.id: + password = ReadOnlyPasswordHashField(label=_("Password"), + help_text=format_lazy(_("""Raw passwords are not stored, so there is no way to see + this user's password, but you can change the password + using this form."""), + reverse_lazy('admin:user_update_password', args=[self.instance.id,])) + ) + self.fields['Password'] = password class UserCreateForm(UserForm): diff --git a/conf/nginx/centos_nginx.conf b/conf/nginx/centos_nginx.conf new file mode 100644 index 0000000..2327039 --- /dev/null +++ b/conf/nginx/centos_nginx.conf @@ -0,0 +1,37 @@ +# For more information on configuration, see: +# * Official English Documentation: http://nginx.org/en/docs/ +# * Official Russian Documentation: http://nginx.org/ru/docs/ + +user nginx; +worker_processes auto; +error_log /var/log/nginx/error.log; +pid /run/nginx.pid; + +# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic. +include /usr/share/nginx/modules/*.conf; + +events { + worker_connections 1024; +} + +http { + log_format main '$remote_addr - $remote_user [$time_local] "$request" ' + '$status $body_bytes_sent "$http_referer" ' + '"$http_user_agent" "$http_x_forwarded_for"'; + + access_log /var/log/nginx/access.log main; + + sendfile on; + tcp_nopush on; + tcp_nodelay on; + keepalive_timeout 65; + types_hash_max_size 2048; + + include /etc/nginx/mime.types; + default_type application/octet-stream; + + # Load modular configuration files from the /etc/nginx/conf.d directory. + # See http://nginx.org/en/docs/ngx_core_module.html#include + # for more information. + include /etc/nginx/conf.d/*.conf; +} diff --git a/conf/nginx/debian_nginx.conf b/conf/nginx/debian_nginx.conf new file mode 100644 index 0000000..5b107cb --- /dev/null +++ b/conf/nginx/debian_nginx.conf @@ -0,0 +1,85 @@ +user www-data; +worker_processes auto; +pid /run/nginx.pid; +include /etc/nginx/modules-enabled/*.conf; + +events { + worker_connections 768; + # multi_accept on; +} + +http { + + ## + # Basic Settings + ## + + sendfile on; + tcp_nopush on; + tcp_nodelay on; + keepalive_timeout 65; + types_hash_max_size 2048; + # server_tokens off; + + # server_names_hash_bucket_size 64; + # server_name_in_redirect off; + + include /etc/nginx/mime.types; + default_type application/octet-stream; + + ## + # SSL Settings + ## + + ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE + ssl_prefer_server_ciphers on; + + ## + # Logging Settings + ## + + access_log /var/log/nginx/access.log; + error_log /var/log/nginx/error.log; + + ## + # Gzip Settings + ## + + gzip on; + + # gzip_vary on; + # gzip_proxied any; + # gzip_comp_level 6; + # gzip_buffers 16 8k; + # gzip_http_version 1.1; + # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; + + ## + # Virtual Host Configs + ## + + include /etc/nginx/conf.d/*.conf; + include /etc/nginx/sites-enabled/*; +} + + +#mail { +# # See sample authentication script at: +# # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript +# +# # auth_http localhost/auth.php; +# # pop3_capabilities "TOP" "USER"; +# # imap_capabilities "IMAP5rev1" "UIDPLUS"; +# +# server { +# listen localhost:110; +# protocol pop3; +# proxy on; +# } +# +# server { +# listen localhost:143; +# protocol imap; +# proxy on; +# } +#} diff --git a/conf/nginx/ubuntu_nginx.conf b/conf/nginx/ubuntu_nginx.conf new file mode 100644 index 0000000..5b107cb --- /dev/null +++ b/conf/nginx/ubuntu_nginx.conf @@ -0,0 +1,85 @@ +user www-data; +worker_processes auto; +pid /run/nginx.pid; +include /etc/nginx/modules-enabled/*.conf; + +events { + worker_connections 768; + # multi_accept on; +} + +http { + + ## + # Basic Settings + ## + + sendfile on; + tcp_nopush on; + tcp_nodelay on; + keepalive_timeout 65; + types_hash_max_size 2048; + # server_tokens off; + + # server_names_hash_bucket_size 64; + # server_name_in_redirect off; + + include /etc/nginx/mime.types; + default_type application/octet-stream; + + ## + # SSL Settings + ## + + ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE + ssl_prefer_server_ciphers on; + + ## + # Logging Settings + ## + + access_log /var/log/nginx/access.log; + error_log /var/log/nginx/error.log; + + ## + # Gzip Settings + ## + + gzip on; + + # gzip_vary on; + # gzip_proxied any; + # gzip_comp_level 6; + # gzip_buffers 16 8k; + # gzip_http_version 1.1; + # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; + + ## + # Virtual Host Configs + ## + + include /etc/nginx/conf.d/*.conf; + include /etc/nginx/sites-enabled/*; +} + + +#mail { +# # See sample authentication script at: +# # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript +# +# # auth_http localhost/auth.php; +# # pop3_capabilities "TOP" "USER"; +# # imap_capabilities "IMAP5rev1" "UIDPLUS"; +# +# server { +# listen localhost:110; +# protocol pop3; +# proxy on; +# } +# +# server { +# listen localhost:143; +# protocol imap; +# proxy on; +# } +#} diff --git a/console/templates/console-vnc-full.html b/console/templates/console-vnc-full.html index 5eccba8..f7c58d1 100755 --- a/console/templates/console-vnc-full.html +++ b/console/templates/console-vnc-full.html @@ -17,7 +17,11 @@ - + + + + @@ -54,12 +58,8 @@ - - - + @@ -91,7 +91,7 @@
-

no
VNC

+

no
VNC

- - - - + id="noVNC_keyboard_button" class="noVNC_button" title="Show Keyboard">
-
- -
-
- - - - - - -
+ +
+
+ + + + + +
@@ -199,68 +189,66 @@
  • Advanced
    -
    -
      -
    • - - -
    • -
    • -
      WebSocket
      -
      -
        -
      • - -
      • -
      • - - -
      • -
      • - - -
      • -
      • - - - -
      • -
      -
      -
    • -
    • -
      -
    • -
    • - - -
    • -
    • - - -
    • -
    • -
      -
    • -
    • - -
    • -
    • -
      -
    • - -
    • - -
    • -
    -
    +
      +
    • + + +
    • +
    • + + +
    • +

    • +
    • + + +
    • +
    • +
      WebSocket
      +
        +
      • + +
      • +
      • + + +
      • +
      • + + +
      • +
      • + + +
      • +
      +
    • +

    • +
    • + +
    • +
    • + + +
    • +

    • +
    • + +
    • +

    • + +
    • + +
    • +
    +
  • +

  • +
  • + Version: +
  • @@ -292,10 +280,14 @@
    -
    +
      -
    • +
    • + + +
    • +
    • {% if perms.instances.passwordless_console %} @@ -304,7 +296,7 @@ {% endif %}
    • - +
    @@ -326,8 +318,8 @@ html attributes which attempt to disable text suggestions on the on-screen keyboard. Let's hope Chrome implements the ime-mode style for example --> - +